(追記)指定した文字列をハイライトするための機能も追加しました。
twtr2src で、ツイート内の URL、@mention、ハッシュタグ(これらをエンティティと呼びます)に自動的にリンクを張るを処理を入れているのですが、パースがうまく行かないケースがあって、リンクが張れないことがありました。その結果、Evernote 投稿時に XML バリデーションエラーになってしまい、投稿されていないケースがあります(後日対策予定)。
最近の Twitter API では、ツイート本文の他に、それらエンティティの情報も含まれていて、その内容や位置を取得できるようになっています(参考:Tweet Entities)。
その情報を使って、ツイートにリンクを張るスクリプトを書いてみました。
twitter_entities_linker.php at master from ogaoga’s TwitterEntitiesLinker – GitHub
下記のような感じで使えます。
// $tweet should be an object of tweet. $html = TwitterEntitiesLinker::getHtml($tweet);
引数 $tweet には、JSON を json_decode() でデコードして得られるオブジェクトを渡します。クラスにするほどでもないですが、ソートの比較関数をカプセル化できたので、クラスにしてみました。
ただ、実は Twitter API が返してくる entities の情報の中で、URL の一部であるアンカーをハッシュタグと間違えて認識しているようで、その位置を返してしまっているようです。なので、アンカー付き URL を含むツイートの場合は、うまくリンクが張れないケースがあります。一応、Twitter Developer Talk に投稿しておきました。
あと、Twitter で @kansai_takako さんが、
@ogaoga 正確に判定するのが結構めんどうでした…とくに検索文字を黄色でハイライトさせるとかが入 ってるとつらい><
って言っていたので、特定文字をハイライトする機能も入れてみました。複数の単語に対して、複数の置き換えが可能です。たとえば複数単語で検索したときに、それぞれの検索語ごとに色を分けてハイライト、みたいなことも可能です。もちろん、リンク内の文字列を置き換えてしまうこともありません。
git の流儀とかよくわかっていませんが、こんな感じでコードを公開することも今後やっていきたいと思っています。まだバグも残っていると思うので、何かありましたら @ogaoga までお知らせください。
コメントをどうぞ