Pergunta

Eu estou tentando sincronizar um monte de vídeos que eu recuperados de um determinado usuário do YouTube para uma tabela de banco de dados de código de vídeo.

Isso ocorre porque o YouTube não permite a adição de informações meta de um vídeo. Daí eu criei uma tabela de vídeo no meu servidor e gostaria de sincronizar videoids.

i. php / mysql aplicativo <-> youtube

A estrutura de dados para vídeos do YouTube é o seguinte:

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

para o meu db é o seguinte:

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

Você sabe como eu posso sincronizar esses dados de modo que:

  1. Sempre que usuário faz upload de um novo vídeo no youtube, eu posso chamar uma função de sincronização que irá recuperar o mais recente vídeo e adicioná-lo ao banco de dados mysql?
  2. No entanto, se o usuário exclui um vídeo no youtube, não há exclusão?
Foi útil?

Solução

Você pode usar array_diff() para comparar os IDs depois de ter buscar-los de ambos os locais, por exemplo:

//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);

E, em seguida, você pode fazer algo como isto:

//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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top