2011/11/11

[Twitter][API] ドメイン名自動リンクのUser Streams APIでの扱い

[Twitter][API] ドメイン名自動リンクのUser Streams APIでの扱い

Tweet::ToDeliciousでTwitterが勝手にリンクにする"example.com"のような文字列を排除しようと試みたのですが、
判別できなかったので諦めました。

ツイートに含まれるのURL情報のフォーマット

通常、User Streams APIでツイート時に含まれるリンクは以下のようにroot.entities.urlに格納されています。
関係ないところは省略しています。

    {
        "entities":
            "url":
                [
                    {
                        "display_url": "example.com",
                        "expanded_url": "http://example.com",
                        "url": "http://t.co/XXXXX",
                        "indices": [0,20]
                    },
                ] 
    }

そして、現在の仕様では"http"が頭に付かない"example.com"のような文字列が含まれていると、"http://example.com"として扱われます。
しかし、この場合はentities.urlにデータは入りません。URLのつもりでツイートしてるわけじゃないから、当たり前と言っていい挙動です。

問題になるケース

問題となるのは、上記のような自動変換される文字列を含み、且つツイートにURLが含まれる場合になります。
例として"example.com http://example.com"とツイートした場合、以下のようなデータが渡ってきます。

    {
        "entities":
            "url":
                [
                    {
                        "display_url": "example.com",
                        "expanded_url": "http://example.com",
                        "url": "http://t.co/XXXXX",
                        "indices": [0,20]
                    },
                    {
                        "display_url": "example.com",
                        "expanded_url": "http://example.com",
                        "url": "http://t.co/YYYYY",
                        "indices": [21,41]
                    }
                ] 
    }

URLに自動変換された文字列のexpanded_urlにはURI schemeが追加され、通常のURLのdisplay_urlからはURI scheme部分が削除されてる状態になっています。
この仕様によりentities.urlの中身からは、どちらが自動変換された文字列なのか判別ができません。
また、ツイート全体のtext情報では全URLがt.coの短縮URLに置換されているので、ここから判別することもできないようです。

0 件のコメント:

コメントを投稿