ما هي أفضل طريقة لمزامنة بنيتي البيانات في PHP؟

StackOverflow https://stackoverflow.com/questions/1028386

  •  06-07-2019
  •  | 
  •  

سؤال

أحاول مزامنة مجموعة من مقاطع الفيديو التي استردتها من مستخدم معين من Youtube إلى جدول قاعدة بيانات لمعرفات الفيديو.

وذلك لأن YouTube لا يسمح بإضافة معلومات تعريفية إلى مقطع فيديو.ومن ثم قمت بإنشاء جدول فيديو على الخادم الخاص بي وأرغب في مزامنة معرفات الفيديو.

أي.تطبيق php/mysql <-> يوتيوب

بنية البيانات لمقاطع فيديو يوتيوب هي كما يلي:

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();
}

هل تعرف كيف يمكنني مزامنة هذه البيانات بحيث:

  1. عندما يقوم المستخدم بتحميل مقطع فيديو جديد على موقع youtube، يمكنني استدعاء وظيفة المزامنة التي ستقوم باسترداد أحدث مقطع فيديو وإضافته إلى قاعدة بيانات mysql؟
  2. ومع ذلك، إذا قام المستخدم بحذف مقطع فيديو على اليوتيوب، فلا يوجد حذف؟
هل كانت مفيدة؟

المحلول

يمكنك استخدام array_diff() لمقارنة المعرفات بمجرد جلبها من كلا الموقعين، على سبيل المثال:

//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
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top