先日公開したつい短ですが、残念ながらクライアントによっては日本語URL(国際化URL)に対応していない場合があります。
Janetterさんはアンカンファレンスの会場で僕がゴネたお願いしたこともあり数日中に対応していただいたのですが、他のクライアントでは特にそういう動きもなく…。
実際、Janetterでもだいぶ複雑な正規表現を使って判定されているようで、他のクライアントにもそれをお願いするのは難しいかもしれません。
が。
さっきTwitter APIのドキュメントを見ていたらそんな問題を一挙に解決する方法が載ってるじゃないですか。
しかもけっこう昔の版から。
なんでみんなこれを活用しないんだろう…。
その方法とは、Tweet Entities。
Twitter APIにリクエストを投げてTLを取得するときに、「include_entities」というパラメータをTrueにして投げると、「entities」というオブジェクトがくっついて帰ってきます。
この中には、ツイート中の「メンションのあて先(ユーザ名)」「ハッシュタグ」「URL」とその出現位置が含まれています。
"entities":
{
"urls":
[
{
"url":"http://bit.ly/dCueLT",
"indices":
[
117,
137
]
}
],
"hashtags":
[
{
"indices":
[
62,
71
],
"text":"titanium"
}
],
"user_mentions":
[
{
"indices":
[
3,
16
],
"screen_name":"squarefactor",
"name":"squareFACTOR",
"id":15893275
},
{
"indices":
[
48,
61
],
"screen_name":"appcelerator",
"name":"Appcelerator",
"id":9662352
},
{
"indices":
[
88,
97
],
"screen_name":"intridea",
"name":"Intridea,
Inc.",
"id":14455548
}
]
},
あとは、この情報通りにリンクを埋め込めばおしまい。
また、いろんな言語向けのライブラリも用意されているので、これを使えばメソッドを呼び出すだけでリンクを張ることができるようです。
で、さっき試してみたら、日本語URLでもちゃんとリンク情報に含まれていました。
もうわざわざ苦労して正規表現なんて使う必要なかったんや!!
というわけで、ぜひこの方法でご対応をお願いします。
Twitter側の日本語URL対応がまともだったらいいんですけどね!
残念なことに検索APIには実装されてないんですよ (´・ω・`)
ってことで結局こんな感じになりました。
ドメインより後ろの日本語なんて知らないよ
https?:\/\/[\S]+[..。]([jJjJ][pPpP]|[a-zA-Z]+)[!#-&*-;=?-[\]-~]*