Sono davvero incerto su come Twitter si aspetta che gli utenti della sua API convertano i tweet in chiaro che invia all'HTML correttamente collegato.PHP: Come utilizzare i dati dell'API di Twitter per convertire URL, menzioni e hastags nei tweet ai collegamenti?
Ecco il punto: JSON API di Twitter invia questo insieme di informazioni di nuovo quando si richiedono i dati dettagliati per un tweet:
{
"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": <REDACTED>,
"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
}
Le parti più interessanti, per questa domanda, sono l'elemento text
e le voci gli array hashtags
, user_mentions
e urls
. Twitter sta dicendo noi dove nell'elemento text
i hastags, menzioni, e gli URL vengono visualizzati con le indices
array ... quindi ecco il nocciolo della questione:
Come usa quei indices
array?
Non è possibile utilizzarli semplicemente eseguendo il ciclo su ciascun elemento di collegamento con qualcosa come substr_replace
, poiché la sostituzione del primo elemento di collegamento nello text
invaliderà tutti i valori di indice per gli elementi di collegamento successivi. Non è inoltre possibile utilizzare la funzionalità dell'array di substr_replace
, poiché funziona solo quando gli si assegna una serie di stringhe per il primo arg, piuttosto che una singola stringa (l'ho provato. I risultati sono ... strani).
Esiste qualche funzione che possa sostituire simultaneamente più sottostringhe delimitate da un indice in una singola stringa con stringhe di sostituzione diverse?
* facepalm * ... Perché non ho pensato che *** *** – CoreDumpError
Funziona per me ... Ho aggiunto un ulteriore bit di codice in alto, come quando si recuperano i retweet che a volte contengono ellissi. Twitter ti consiglia di utilizzare il retweet_status e le sue entità in tali circostanze: https://dev.twitter.com/overview/api/entities-in-twitter-objects#retweets – diggersworld
Wow, ottimo approccio, non ci avrei pensato. .. –