Bonjour,
Depuis un textarea je récupère des id de tweets (l'utilisateur met les liens des tweets et moi je récupère leurs id), j'aimerais donc pouvoir afficher les tweets grâce à l'API twitter, c'est ce que j'essaye de faire avec ce code :
<?php
$url = $_POST['url'];
//Insertion en bdd
$q = array('test' => $url);
$sql = "INSERT INTO test (test) VALUES (:test)";
$req = $cnx->prepare($sql);
$req->execute($q);
preg_match_all("/\[tweet\](.+)\[\/tweet\]/", $url, $matches); //L'utilisateur m'envoit ses liens en utilisant une balise : [tweet] Le lien [/tweet]
$tabTostring = implode(" ", $matches[1]); //je reçois un tableau du preg_match_all, on le transforme donc en string pour le traitement.
preg_match_all("/\/[0-9]++/", $tabTostring, $matche); //Avec la string créé précedemment on fais une autre recherche, cette fois-ci pour récupérer l'id du tweet.
$matche = implode(' ', $matche[0]); //On reçois un tableau que l'on transforme en string
$matche = preg_replace("/\//", '', $matche); // On enlève le / au début de l'id.
$matche = explode(' ', $matche); on met les id récupéré dans un tableau
//Api Twitter
$connection = new TwitterOAuth("XXXXX", "XXXXXX", "XXXXX", "XXXXXX"); // Connexion à l'API
foreach($matche as $id){ //Avec les id récupéré au dessus on lance une recherche avec l'API Twitter (c'est là que le problème se pose).
$tweets = $connection->get('statuses/show', [
'id' => $id
]);
}
echo $tweets->text;
Quand je fais un foreach sur mes id pour les envoyer pour traitement dans l'API Twitter je ne récupère qu'un seul tweet.. et non pas tous les tweets. (dans le cas où je met trois liens).
Bonsoir.
C'est normal étant donné que tu écrases la variable tweets
à chaque fois dans ta boucle foreach
, tu ne récupèreras donc que la dernière valeur de ta variable tweets
, il te faudrait donc plutôt faire quelque chose comme :
$tweets = [];
foreach ($matche as $id) {
$tweets[] = $connection->get('statuses/show', [
'id' => $id
]);
}
De cette manière, ta variable tweets
pourra contenu plusieurs enregistrements au lieu d'un seul.
Par contre, n'oublies qu'étant donné que ta variable tweets
doit contenir plusieurs enregistrements, qu'il te faut faire une boucle dessus pour récupérer chacun des enregistrements, soit par exemple :
foreach ($tweets as $tweet) {
echo $tweet->text;
}
Mais donc vu que tu défini $tweets comme un tableau au dessus $tweets = [];, je n'ai pas besoin de le re-définir dans mon foreach :
$tweets[] = $connection->get('statuses/show', [
Au début je définis la variable tweets
comme un tableau vide, mais chaque tour de la boucle foreach, je ne la redéfinis pas, mais je l'incrémente pour lui ajouter un enregistrement.
Il y a une différence entre $tweets = []
et $tweets[] = ...
.