Я действительно озадачен тем, как 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
, так как он работает только тогда, когда вы даете ему массив строк для первого аргумента, а не одну строку (Я проверял это. Результаты... странные ).
Есть ли какая-то функция, которая может одновременно заменять несколько подстрок с разделителями индекса -в одной строке разными строками замены?