Hallo

,
auf der Suche nach einer Möglichkeit zum Einbinden von YouTube Videos in die Coppermine Galerie bin ich auf diesen Post gestoßen:
Displaying videos from Youtube in Coppermine . Die hierin beschriebene Modifikation habe ich nach geringfügiger Anpassung an pragmaMx erfolgreich auf meiner Testseite eingespielt.
Demo auf meiner
Testseite.Meine Daten: CMS-Version: pragmaMx 0.1.9, 1.30/2007-04-05
PHP-Version: 5.2.3
MySQL-Version: 5.0.37-max-log
Coppermine Photo Gallery 1.4.10 (stable)
Coppermine Theme: mx-port
Nachfolgend habe ich die obig genannte Modifikationsbeschreibung ins Deutsche übersetzt und die vorzunehmenden Codeänderungen an pragmaMX angepasst
(lediglich die Themeanpassung in der themes.inc.php anstatt theme.php). Irrtümer und Auslassungen vorbehalten, ohne jegliche Gewähr!
Es kann, aber muss nicht funktionieren! Unbedingt beachten! DB und die zu ändernden Dateien vorher sichern bzw. Komplettsicherung vornehmen!
Diese Modifikation erlaubt dir Videos von YouTube in deine Coppermine Galerie einzubinden. Es erscheint auf der
Upload Seite ein neuer Bereich, wo du die URL der Videos dann eingeben kannst. Die Coppermine Galerie wird automatisch das Thumbnail vom Video nutzen, wenn du das Video eingebunden hast.
Um diese Modifikation nutzen zu können, werden einige Extras benötigt:· YouTube dev API USER-ID (
http://www.youtube.com/my_profile_dev)
(du musst dir bei YouTube vorher einen Account einrichten)· PHP URL
“fopen“ muss eingeschaltet sein
(kann unter phpinfo nachgeprüft werden)· PHP 5
(4.xx, siehe Codeanpassung*. Kann, aber muss nicht funktionieren!)· Reguläre URI Uploads müssen korrekt arbeiten, richtige Benutzerrechte etc.
Zu ändernde Dateien:
upload.php, themes.inc.php1.
upload.php, füge diesen Code in die Nähe des Anfangs von der Datei nach den Kommentaren ein
(dieser Schritt kann ausgelassen werden, wenn du PHP5 hast)*
if (!function_exists('file_put_contents')) {
function file_put_contents($n,$d) {
$f=@fopen($n,"w");
if (!$f) {
return false;
} else {
fwrite($f,$d);
fclose($f);
return true;
}
}
}
dann finde
// Add the control device.
$form_array[] = array('control', 'phase_1', 4);
füge davor ein
// Youtube
if (USER_ID) {
$form_array[] = 'Youtube uploads';
$form_array[] = array('', 'YT_array[]', 0, 256, 3);
$form_array[] = 'Note: YouTube videos must be added in the form http://www.youtube.com/watch?v=xxxxxxxxxxx';
}
finde
//Now we must prepare the inital form for adding the pictures to the database, and we must move them to their final location.
füge davor ein
// youtube
$YT_array = count($_POST['YT_array']);
if ($YT_array) {
$YT_failure_array = array();
for ($counter = 0; $counter < $YT_array; $counter++) {
// Create the failure ordinal for ordering the report of failed uploads.
$failure_cardinal = $counter + 1;
$failure_ordinal = ''.$failure_cardinal.'. ';
$YT_URI = $_POST['YT_array'][$counter];
if (!$YT_URI) continue;
if (preg_match('/youtube\.com\/watch\?v=(.*)/', $YT_URI, $matches)){
$vid = $matches[1];
$xurl = "http://www.youtube.com/api2_rest?method=youtube.videos.get_details&dev_id=xxxxxxxxxxx&video_id=$vid";
$xdata = file_get_contents($xurl);
file_put_contents($CONFIG['fullpath'] . "edit/yt_$vid.xml", $xdata);
// todo: parse the xml properly
if (preg_match('/<thumbnail_url>(.*)<\/thumbnail_url>/', $xdata, $xmatches)){
$thumbnail = $xmatches[1];
$rh = fopen($thumbnail, 'rb');
$wh = fopen($CONFIG['fullpath'] . "edit/yt_$vid.jpg", 'wb');
while (!feof($rh)) fwrite($wh, fread($rh, 1024));
fclose($rh);
fclose($wh);
$escrow_array[] = array('actual_name'=>"youtube_$vid.jpg", 'temporary_name'=> "yt_$vid.jpg");
} else {
$YT_failure_array[] = array( 'failure_ordinal'=>$failure_ordinal, 'URI_name'=> $YT_URI, 'error_code'=> $xdata);
}
} else {
$YT_failure_array[] = array( 'failure_ordinal'=>$failure_ordinal, 'URI_name'=> $YT_URI, 'error_code'=> 'Failed to find video');
}
}
}
Im obigen Codeblock, musst du xxxxxxxxxxx mit deiner YouTube Entwickler (developer) ID ersetzen.
finde
$zip_error_count = count($zip_failure_array);
füge danach ein
$YT_error_count = count($YT_failure_array);
finde
// Create error report if we have errors.
if (($file_error_count + $URI_error_count + $zip_error_count) > 0) {
ändere in
// Create error report if we have errors.
if (($file_error_count + $URI_error_count + $zip_error_count + $YT_error_count) > 0) {
finde
// Close the error report table.
endtable()
füge davor ein
// Look for YT upload errors.
if ($YT_error_count > 0) {
// There are URI upload errors. Generate the section label.
form_label("YT errors:");
echo "<tr><td>URI</td><td>Error message</td></tr>";
// Cycle through the file upload errors.
for ($i=0; $i < $YT_error_count; $i++) {
// Print the error ordinal, file name, and error code.
echo "<tr><td>{$YT_failure_array[$i]['failure_ordinal']} {$YT_failure_array[$i]['URI_name']}</td><td>{$YT_failure_array[$i]['error_code']}</td></tr>";
}
}
finde
$form_array = array(
sprintf($lang_upload_php['max_fsize'], $CONFIG['max_upl_size']),
array($lang_upload_php['album'], 'album', 2),
array('MAX_FILE_SIZE', $max_file_size, 4),
array($lang_upload_php['picture'], 'userpicture', 1, 1),
array($lang_upload_php['pic_title'], 'title', 0, 255, 1),
array($captionLabel, 'caption', 3, $CONFIG['max_img_desc_length']),
array($lang_upload_php['keywords'], 'keywords', 0, 255, 1),
array('event', 'picture', 4)
);
ändere in
if (preg_match('/^youtube_(.*)\.jpg$/', $file_set[0], $ytmatches)){
$vid = $ytmatches[1];
$xdata = file_get_contents($CONFIG['fullpath'] . "edit/yt_$vid.xml");
// todo: parse the xml properly
preg_match('/<description>(.*)<\/description>/', $xdata, $xmatches);
$description = substr($xmatches[1], 0, $CONFIG['max_img_desc_length']);
// todo: parse the xml properly
preg_match('/<tags>(.*)<\/tags>/', $xdata, $xmatches);
$keywords = $xmatches[1];
// todo: parse the xml properly
preg_match('/<title>(.*)<\/title>/', $xdata, $xmatches);
$title = substr($xmatches[1], 0, 255);
$form_array = array(
array($lang_upload_php['album'], 'album', 2),
array($lang_upload_php['pic_title'], 'title', 0, 255, 1, $title),
array($captionLabel, 'caption', 3, $CONFIG['max_img_desc_length'], $description),
array($lang_upload_php['keywords'], 'keywords', 0, 255, 1, $keywords),
array('control', 'phase_2', 4),
array('unique_ID', $_POST['unique_ID'], 4),
);
} else {
$form_array = array(
sprintf($lang_upload_php['max_fsize'], $CONFIG['max_upl_size']),
array($lang_upload_php['album'], 'album', 2),
array('MAX_FILE_SIZE', $max_file_size, 4),
array($lang_upload_php['picture'], 'userpicture', 1, 1),
array($lang_upload_php['pic_title'], 'title', 0, 255, 1),
array($captionLabel, 'caption', 3, $CONFIG['max_img_desc_length']),
array($lang_upload_php['keywords'], 'keywords', 0, 255, 1),
array('event', 'picture', 4)
);
}
2. modules/Gallery/include/
themes.inc.php führe die nachfolgende Änderung durch
finde
if (isset($image_size['reduced'])) {
ändere in
if (preg_match('/^youtube_(.*)\.jpg$/', $CURRENT_PIC_DATA['filename'], $ytmatches)){
$vid = $ytmatches[1];
$pic_html = '<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/'. $vid . '"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/'. $vid . '" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object><br />';
} elseif (isset($image_size['reduced'])) {
Wenn du diese Nachricht beim Upload erhältst:
1YouTube internal error. Please report this issue -- including the exact method of producing this error -- to YouTube.Dann ist deine dev_id vermutlich falsch.