Twitterの謎の仕様について
書いてみようと思います。
はるかぜちゃん(@harukazechan)っていますね。
彼女がツイートに顔を表象するときの記号を皆さんご存知だと思います。
(ω)
それを真似しようと思って、こんなツイートを書いてみました。
(m)
するとツイッターは何事もなかったのような反応を示しました。
おや、と思って、何度かやり直しましたが、全く反応なし。
そこで、普通にツイートしてみると、ツイートされる。
これは何だろうと思って、いろいろと試してみました。
そうすると、
(w)
や、
(M)
もダメなようでした。
そこでGroovy
ですよ
総当りで何がダメなのかを調べてみました。
ProhibitedTweet.groovy
@Grab(group='org.twitter4j', module='twitter4j-core', version='2.2.4')
import twitter4j.*
import twitter4j.auth.*
import twitter4j.conf.*
class Result {
int id
long status
String expected
String result
String showResult(){
return "success : ${expected == result}, id : ${id}, expected : ${expected}, result : ${result}"
}
@Override
String toString() {
return "<id : ${id}, expected : ${expected}, result : ${result}, status : ${status}>"
}
}
def consumerKey = 'consumerKey'
def consumerSecret = 'consumerSecret'
def accessToken = 'accessToken'
def accessTokenSecret = 'accessTokenSecret'
def conf =
new ConfigurationBuilder()
.setOAuthConsumerKey(consumerKey)
.setOAuthConsumerSecret(consumerSecret)
.setOAuthAccessToken(accessToken)
.setOAuthAccessTokenSecret(accessTokenSecret).build()
def twitter = new TwitterFactory(conf).getInstance()
def results = []
(65..90).each {
def tweets = "(${it as char})"
try{
def result = twitter.updateStatus(tweets)
results << new Result(id : it, expected : tweets, result : result.text, status : result.id)
}catch(TwitterException e) {
results << new Result(id : it, expected : tweets, result : '', status : -1)
}
}
results.each { println it.showResult()}
実行結果は、こんなになりました。
success : true, id : 65, expected : (A), result : (A)
success : true, id : 66, expected : (B), result : (B)
success : true, id : 67, expected : (C), result : (C)
success : false, id : 68, expected : (D), result : (C)
success : true, id : 69, expected : (E), result : (E)
success : false, id : 70, expected : (F), result : (E)
success : false, id : 71, expected : (G), result : (E)
success : true, id : 72, expected : (H), result : (H)
success : true, id : 73, expected : (I), result : (I)
success : true, id : 74, expected : (J), result : (J)
success : true, id : 75, expected : (K), result : (K)
success : false, id : 76, expected : (L), result : (K)
success : false, id : 77, expected : (M), result : (K)
success : true, id : 78, expected : (N), result : (N)
success : true, id : 79, expected : (O), result : (O)
success : true, id : 80, expected : (P), result : (P)
success : true, id : 81, expected : (Q), result : (Q)
success : true, id : 82, expected : (R), result : (R)
success : false, id : 83, expected : (S), result : (R)
success : true, id : 84, expected : (T), result : (T)
success : true, id : 85, expected : (U), result : (U)
success : true, id : 86, expected : (V), result : (V)
success : false, id : 87, expected : (W), result : (V)
success : true, id : 88, expected : (X), result : (X)
success : true, id : 89, expected : (Y), result : (Y)
success : true, id : 90, expected : (Z), result : (Z)
結果としては、
(D)、(F)、(G)、(L)、(M)、(S)、(W)、(d)、(f)、(g)、(l)、(m)、(s)、(w)
を単独でツイートすることはできないということがわかりました。
これらをツイートすると、前のツイーとが返ってきます。
考察
さて、理由ですが、わかりません。fとか、sはなんとなくわかりますが、
他のが全然わかりません。
(fはf**k、sはs*x)
顔文字とか、何かを想起するような記号なのかと考えましたが、
顔文字とかのように、文字によって何かを表すというのは日本語や中国語の表意文字体系での発想であり、
英語圏というかラテン語圏というか、インド何とか諸語の系統の表音文字体系にはない発想ですので、
それを禁止しているようにも思えません。
というわけで、なんでダメなんでしょうね。