PHP :Как использовать данные Twitter API для преобразования URL-адресов, упоминаний и хэштегов в твитах в ссылки?

Я действительно озадачен тем, как Twitter ожидает, что пользователи его API будут преобразовывать отправляемые твиты с открытым текстом в правильно связанный HTML.

Вот в чем дело :JSON API от Twitter отправляет этот набор информации обратно, когда вы запрашиваете подробные данные для твита:

{
    "created_at":"Wed Jul 18 01:03:31 +0000 2012",
    "id":225395341250412544,
    "id_str":"225395341250412544",
    "text":"This is a test tweet. #boring @nbc http://t.co/LUfDreY6 #skronk @crux http://t.co/VpuMlaDs @twitter",
    "source":"web",
    "truncated":false,
    "in_reply_to_status_id":null,
    "in_reply_to_status_id_str":null,
    "in_reply_to_user_id":null,
    "in_reply_to_user_id_str":null,
    "in_reply_to_screen_name":null,
    "user": ,
    "geo":null,
    "coordinates":null,
    "place":null,
    "contributors":null,
    "retweet_count":0,
    "entities":{
        "hashtags":[
            {
                "text":"boring",
                "indices":[22,29]
            },
            {
                "text":"skronk",
                "indices":[56,63]
            }
        ],
        "urls":[
            {
                "url":"http://t.co/LUfDreY6",
                "expanded_url":"http://www.twitter.com",
                "display_url":"twitter.com",
                "indices":[35,55]
            },
            {
                "url":"http://t.co/VpuMlaDs",
                "expanded_url":"http://www.example.com",
                "display_url":"example.com",
                "indices":[70,90]
            }
        ],
        "user_mentions":[
            {
                "screen_name":"nbc",
                "name":"NBC",
                "id":26585095,
                "id_str":"26585095",
                "indices":[30,34]
            },
            {
                "screen_name":"crux",
                "name":"Z. D. Smith",
                "id":407213,
                "id_str":"407213",
                "indices":[64,69]
            },
            {
                "screen_name":"twitter",
                "name":"Twitter",
                "id":783214,
                "id_str":"783214",
                "indices":[91,99]
            }
        ]
    },
    "favorited":false,
    "retweeted":false,
    "possibly_sensitive":false
}

Интересными частями для этого вопроса являются элемент textи записи в массивах hashtags, user_mentionsи urls. Твиттер сообщает нам, где в элементе textпоявляются хэштеги, упоминания и URL-адреса вместе с массивами indices... так вот суть вопроса:

Как вы используете эти indicesмассивы?

Вы не можете просто использовать их напрямую, перебирая каждый элемент ссылки чем-то вродеsubstr_replace, так как замена первого элемента ссылки в textсделает недействительными все значения индекса для последующих элементов ссылки. Вы также не можете использоватьsubstr_replace, так как он работает только тогда, когда вы даете ему массив строк для первого аргумента, а не одну строку (Я проверял это. Результаты... странные ).

Есть ли какая-то функция, которая может одновременно заменять несколько подстрок с разделителями индекса -в одной строке разными строками замены?

13
задан coredumperror 18 July 2012 в 01:48
поделиться