נגישות       נגישות
שינוי גודל טקסט:
א א א
שינוי צבעי האתר:
? מקשי קיצור:

לחיצה חוזרת ונשנית על המקש Tab תעביר אתכם בין הקישורים והאזורים השונים בעמוד.

הפעלת מקשי הקיצור תלויה בדפדפן שבו אתם משתמשים.

Internet Explorer, Chrome ובגרסאות ישנות של Firefox: לחצו על מקש Alt ועל מקש המספר או האות על-פי הרשימה. ב Firefox 3 ומעלה: לחצו על המקשים Alt + Shift + המספר או האות.

S - עבור לתוכן הדף
L - חיפוש
1- עמוד הבית
2 - פרוייקטים
3 - מדריכים
4 - אודות
5 - צרו קשר
6 - הצהרת נגישות
 

עיבוד XML יוטיוב למפת אתר של וידאו

מחבר:
בתאריך:

אחת המטלות היותר מייגעות היא עריכת מפת אתר לווידאו כדי לדווח לגוגל על הסרטונים באתר , לכן אני מעדיף לתת ל-PHP לעשות את המטלה במקומי. העניין הוא שאם אתם מעלים את הסרטונים שלכם ליוטיוב, כמו רובנו, גוגל מספק לכם פיד XML עם מרבית המידע הרלוונטי למפת האתר, כך שניתן להשתמש בחלק מהמידע שמספק הפיד כדי להזין אותו חזרה בתור מפת אתר, ובכך לחסוך זמן ועצבים.

בשביל המדריך הזה תצטרכו:

א. ידע מסוים ב-PHP .

ב. גישה לשרת (אפשר להשתמש ב-WAMP על המחשב האישי).

ג. גישה לפיד הערוץ שלכם ב-youtube.

 

גישה לפיד הערוץ שלכם ביוטיוב

כדי לקבל גישה לפיד היוטיוב, צריך להכנס לחשבון היוטיוב שלכם, ולגלוש לכתובת הבאה:

https://www.youtube.com/account_advanced

ומתחת לפרטי חשבון, תוכלו למצוא את ID מזהה הערוץ, העתיקו את מזהה הערוץ, ושמרו אותו.

גלשו לכתובת הבאה עם מזהה הערוץ כדי לראות את פיד היוטיוב עבור הסרטונים (החליפו את youtubeId במזהה הערוץ מיוטיוב):

http://gdata.youtube.com/feeds/api/users/youtubeId/uploads

אם אתם רואים דף שמכיל מידע XML אודות הסרטונים שלכם, הגעתם למקום הנכון.

 

עיבוד XML

עיבוד ה-XML נעשה באמצעות הרחבה נוחה של PHP ששמה simpleXML. זו הרחבה שקיימת בכל ההתקנות של PHP, ויתרונה בכך שהיא יכולה להפוך מסמך XML לאובייקט PHP שניתן לעבוד אתו באמצעות מערכים ותכונות של אובייקטים. כדי להבין כיצד simpleXML עובד, נתחיל מהדוגמה הפשוטה הבאה:

<?xml version="1.0" encoding="UTF-8" ?>
<videos xmlns:media='http://search.yahoo.com/mrss/'>
 <video name="my fabolous vacation">
  <published>2012</published>
  <videomaker>me</videomaker>
  <media:keywords>fun</media:keywords>
 </video>
 <video name="my wonderful tutorial">
  <published>2013</published>
  <videomaker>me</videomaker>
  <media:keywords>php</media:keywords>
 </video>
</videos>

ה-XML כולל את אלמנט השורש (root), שהוא videos ותחתיו שני סרטונים שכל אחד מהם תחום בתוך התגית video. בתוך כל תגית נמצאות תגיות נוספות כדוגמת תאריך פרסום ויוצר הסרט.

כדי למצות את המידע למשהו שאנחנו יכולים לעבוד אתו, נשתמש ב-simpleXML באופן הבא:

$xml = "my_xml_file.xml";
$parsedXml = simplexml_load_file($xml);

ה-simpleXML מעלה את הקובץ והופך אותו לאובייקט פשוט, שאתו ניתן לעבוד, וניתן למצות ממנו את שלושת סוגי המידע שמעניינים אותנו:

1. מידע שנמצא תחת תגיות, דוגמת published.

2. מידע שמוצמד כ-attribute לתגיות, דוגמת name.

3. מידע שנמצא תחת מרחב שמות (namespace), דוגמת media.

כדי למצות מידע שנמצא תחת תגיות נשתמש בתחביר הבא. בדוגמה, אנו רוצים לשלוף את תאריך הפרסום מהאלמנט השני.

echo $parsedXml->video[1]->published;//2013

כך ממצים מידע מתכונה (attribute):

echo $parsedXml->video[0]["name"];//my fabolous vacation

כדי להתמודד עם מרחב שמות דרושה מעט יותר תושיה. קודם כל אנו צריכים לדעת מה שמו של ה-namespace (במקרה זה, media),ואז עלינו לבדוק לאיזה מרחב שמות הוא ממופה, כפי שמוגדר באלמנט השורש. בדוגמה, media ממופה ל-'http://search.yahoo.com/mrss/' כפי שניתן לראות בתגית videos:

<videos xmlns:media='http://search.yahoo.com/mrss/'>

לכן, עלינו להגדיר את מרחב השמות, כדי לגשת למידע. לדוגמה:

$ns = $parsedXml->getNameSpaces(true);
$media = $parsedXml->video[1]->children($ns["media"]);//php

 

סקריפט למיצוי XML מיוטיוב למפת אתר וידאו

זה הסקריפט שיכול למצות בשבילכם את המידע מפיד הערוץ שלכם ביוטיוב למפת אתר וידאו. החליפו את ה- $youtubeId , בקוד מזהה הערוץ שלכם, הריצו את הסקריפט, ותקבלו קובץ xml, שאחרי עריכה ניתן להציג לגוגל.

$youtubeId = "--------------------";
$url = "http://gdata.youtube.com/feeds/api/users/".$youtubeId."/uploads";
 
$xml = file_get_contents($url);
$feed = simplexml_load_string($xml);
$ns = $feed->getNameSpaces(true);
 
// Extract information
$extractedFromYT = array();
 
$entriesCounter = 0;
foreach ($feed->entry as $entry) {
 
  $extractedFromYT[$entriesCounter]["published"] = $entry->published;
 
  $category = $entry->category[1]->attributes()->label;
  $extractedFromYT[$entriesCounter]["category"] = str_replace('&','',$category);
 
  $group = $entry->children($ns["media"])->group;
  $extractedFromYT[$entriesCounter]["title"] = $group->title;
  $extractedFromYT[$entriesCounter]["description"] = $group->description;
  $extractedFromYT[$entriesCounter]["keywords"] = $group->keywords;
 
  $plaer = $group->player->attributes();
  $playerUrl = $plaer-> url;
  $playerUrl = str_replace('&feature=youtube_gdata_player','',$playerUrl);
  $extractedFromYT[$entriesCounter]["playerUrl"] = $playerUrl;
 
  $thumbnail = $group->thumbnail[0]->attributes();
  $extractedFromYT[$entriesCounter]["thumbnailLoc"] = $thumbnail->url;
 
  $content0 = $group->content[0]->attributes();
  $extractedFromYT[$entriesCounter]["duration"] = $content0->duration;
 
  $entriesCounter++;
}
 
// Prepare XML content.
$content = '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL;
$content .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"';
$content .= 'xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">'.PHP_EOL;
 
foreach($extractedFromYT as $entry){
  extract($entry);
 
  $content .= "<url>".PHP_EOL;
  $content .= "<loc></loc>".PHP_EOL;
  $content .= "<video:video>".PHP_EOL;
  $content .= "<video:thumbnail_loc>".$thumbnailLoc."</video:thumbnail_loc>".PHP_EOL;
  $content .= "<video:title>".$title."</video:title>".PHP_EOL;
  $content .= "<video:description>".$description."</video:description>".PHP_EOL;
  $content .= "<video:player_loc allow_embed='yes'>".$playerUrl."</video:player_loc>".PHP_EOL;
  $content .= "<video:duration>".$duration."</video:duration>".PHP_EOL;
  $content .= "<video:category>".$category."</video:category>".PHP_EOL;
  $content .= "<video:family_friendly></video:family_friendly>".PHP_EOL;
  $content .= "<video:publication_date>".$published."</video:publication_date>".PHP_EOL;
   $content .= "<video:requires_subscription>no</video:requires_subscription>".PHP_EOL;
   $content .= "<video:tag>".$keywords."</video:tag>".PHP_EOL;
  $content .= "</video:video>".PHP_EOL;
  $content .= "</url>".PHP_EOL;
}
 
$content .= "</urlset>";
 
// Write the xml sitemap
$fileToWrite = "video-sitemap.xml";
file_put_contents($fileToWrite,$content, LOCK_EX);

אחרי שתקבלו את קובץ ה-xml, הקפידו לערוך אותו במידת הצורך, לדוגמה, הוסיפו את ה-URL שבו נמצא הסרטון בין התגיות loc, והוסיפו yes בין התגיות family_friendly אם הסרטון ידידותי למשפחה.

 

כל מדריכי ה-PHP

 

 

הוסף תגובה חדשה

 

= 6 + 6