août 24
RSS To Twitter
Non ce blog n’est pas mort ! Pour preuve, je vous livre un petit bout de code tout simple, une fois encore pour un script PHP / Twitter.
N’ayant pas trouvé de service gratuit satisfaisant pour transformer un flux RSS en Tweets, j’ai dû ressortir l’éditeur de PHP !
Le script suivant est à appeler en ligne de commande par exemple. Vous pouvez le placer dans le cron pour qu’il soit appelé automatiquement de façon régulière.
Pensez juste à bien renseigner les deux constantes LOGIN et PASSWORD avec vos informations de compte Twitter et à mettre l’URL d’un flux RSS dans la variable $feedUrl. Et veillez également à ce que le script ait bien les droit d’écriture dans le répertoire ou au moins sur le fichier last_xxx.txt ou xxx est le login twitter (sinon c’est le flood assuré de votre compte twitter).
Petits avantages de ce script :
- Utilisation de is.gd comme service de racourcisseur d’URL.
- Optimisation de la taille du Tweet pour qu’il puisse être RT facilement !
Voilà le bestiau :
/* start config */
define(‘LOGIN’,‘login_twitter’);
define(‘PASSWORD’,‘password_twitter’);
$feedUrl = ‘url_du_flux_a_promotionner’;
/* end config */
ini_set(‘user_agent’,‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)’);
$lastFile = sprintf(‘last_%s.txt’,LOGIN);
$maxLength = 138 – strlen(sprintf(‘RT @%s:’,LOGIN));
function send_twitter($message= »,$apiUrl=‘http://twitter.com/statuses/update.xml’) {
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, "$apiUrl");
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_POST, 1);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message");
curl_setopt($curl_handle, CURLOPT_USERPWD, sprintf(‘%s:%s’,LOGIN,PASSWORD));
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
if(strpos($buffer,‘<error>’) !== false) {
return false;
}
else {
return true;
}
}
if ($x = simplexml_load_file($feedUrl)) {
$last = @file_get_contents($lastFile);
$update = false;
foreach ($x->channel->item as $v) {
$title = (string)$v->title;
$url = (string)$v->link;
$msg = "$title $url";
if ($msg == $last) exit;
$url = $url ? file_get_contents(‘http://is.gd/api.php?longurl=’ . $url) : »;
$N = max(0,$maxLength – strlen($url));
if ($N) {
$title = substr($title,0,$N);
$tweet = trim("$title $url");
if ($tweet && send_twitter($tweet)) {
if (!$update) file_put_contents($lastFile,$msg);
$update = true;
sleep(1);
}
}
}
}
?>

24 septembre 2009 @ 20:52
Je teste de suite, exactement ce dont j’avais besoin