2009-06-22 5 views
2

J'essaye de synchroniser un groupe de vidéos que j'ai récupérées d'un utilisateur particulier de Youtube à une table de base de données des identifiants visuels. Ceci est dû au fait que YouTube n'autorise pas l'ajout d'informations méta à une vidéo. J'ai donc créé une table vidéo sur mon serveur et j'aimerais synchroniser les vidéos.Quel est le meilleur moyen de synchroniser 2 structures de données en PHP?

-à-dire l'application php/mysql < -> youtube

La structure de données pour les vidéos YouTube est comme suit:

foreach ($feed as $entry) { 
    print "<p>"; 
    print $entry->getVideoId(); 
    print "</p>"; 
} 

pour ma db est la suivante:

$rs->MoveFirst(); 
while (!$rs->EOF) { 
    print "<p>"; 
    print $rs->fields['yt_id']; 
    print "</p>"; 
    $rs->MoveNext(); 
} 

Savez-vous comment puis-je synchroniser ces données de sorte que:

  1. Chaque fois que l'utilisateur télécharge une nouvelle vidéo sur youtube, je peux appeler une fonction de synchronisation qui va récupérer la dernière vidéo et l'ajouter à la base de données mysql.
  2. Cependant, si l'utilisateur supprime une vidéo sur youtube, il n'y a pas de suppression?

Répondre

1

Vous pouvez utiliser array_diff() pour comparer les ID une fois que vous les avez lues dans les deux endroits, par exemple:

//build array of video IDs in YouTube 
$arYT = array(); 
foreach ($feed as $entry) { 
    $arYT[] = $entry->getVideoId(); 
} 

//build array of video IDs in local DB 
$arDB = array(); 
$rs->MoveFirst(); 
while (!$rs->EOF) { 
    $arDB[] = $rs->fields['yt_id']; 
    $rs->MoveNext(); 
} 

//to download, we want IDs which are in YouTube but not in the local Db 
$idsToDownload = array_diff($arYT, $arDB); 

//to delete, we want IDs which are in the local DB but not in YouTube 
$idsToDelete = array_diff($arDB, $arYT); 

Et vous pouvez faire quelque chose comme ceci:

//download new videos 
foreach ($idsToDownload as $id) { 
    //get video info for video $id and put into local db  
} 

//delete deleted videos 
foreach ($idsToDelete as $id) { 
    //delete $id from local DB 
} 
+0

grâce à l'introduction array_diff(); c'est fantastique! – bigsurf

Questions connexes