PHPで2つのデータ構造を同期する最良の方法は何ですか?
質問
特定のユーザーからYouTubeから取得した多数の動画を、動画IDのデータベーステーブルに同期しようとしています。
これは、YouTubeが動画へのメタ情報の追加を許可していないためです。したがって、サーバー上にビデオテーブルを作成し、videoidを同期したいと思います。
i.e。 php / mysql app <!> lt;-<!> gt; youtube
youtube動画のデータ構造は次のとおりです:
foreach ($feed as $entry) {
print "<p>";
print $entry->getVideoId();
print "</p>";
}
私のデータベースの場合:
$rs->MoveFirst();
while (!$rs->EOF) {
print "<p>";
print $rs->fields['yt_id'];
print "</p>";
$rs->MoveNext();
}
これらのデータを同期する方法を知っていますか:
- ユーザーがyoutubeで新しい動画をアップロードするたびに、最新の動画を取得してmysql dbに追加する同期関数を呼び出すことができますか?
- ただし、ユーザーがYouTubeで動画を削除した場合、削除はありませんか?
解決
array_diff()
を使用してIDを1回比較できます両方の場所からそれらを取得しました。例:
//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);
そして、次のようなことができます:
//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
}
所属していません StackOverflow