20 мар. 2012 г.

MySQL хранимые процедуры


Stored procedures - что это?

Хранимые процедуры появились начиная с 5 версии MySQL. Они позволяют автоматизировать сложные процессы на уровне MySQL, нежели использовать для этого внешние скрипты. Это даёт нам наиболее высокую скорость выполнения, т.к. мы не гоняем большое количество запросов, а всего лишь один раз вызываем ту или иную процедуру (или функцию).

Что для этого нужно? Установите MySQL сервер версии 5 или выше (dev.mysql.com/downloads). Процедуры можно создавать как запросы, например через командную строку MySQL, но для удобства советую скачать MySQL GUI Tools (dev.mysql.com/downloads/gui-tools). Данный пакет включает в себя три программы - MySQL Administrator, MySQL Query Browser и MySQL Migration Toolkit. Нам понадобятся первые две. (Хотя можно обойтись одним MySQL Query Browser, но все эти $$ в хранимых процедурах иногда могут сбить с толку).

6 мар. 2012 г.

Превьюшки видео (youtube, rutube, vimeo)

Иногда требуется получить превью-, thumbnail-картинку (или, по-другому, уменьшенную версию кадра) видеофайла. Данные функции позволяют вытащить превьюшки видеофайлов с таких популярных сервисов как youtube, rutube, vimeo.
getVideoUrl($data)
, где $data — html-код для встраивания видео (обычно, начинается с <object> или <iframe>)
getVideoThumbUrl($url)
, где $url — src видеофайла
Выкладываю как есть:
function getVideoUrl ($data) {

    if (preg_match("/<iframe.*?src=\"([^\"]+)\".*?><\/iframe>/i", $data, $matches)) {

        $url = $matches[1];

    }

    if (preg_match("/<object.*?>.*?<param name=\"movie\" value=\"([^\"]+)\"( \/>|><\/param>).*?<\/object>/i", $data, $matches)) {

        $url = $matches[1];

    }

    return $url;

}



function getVideoThumbUrl ($url) {

    if (!is_string($url) || empty($url)) return false;

    $url = str_replace("&amp;", "&", $url);

    $arr = parse_url($url);

    $arr[host] = str_replace('www.', '', $arr[host]);

    $url = "";

    switch ($arr[host]) {

        case 'rutube.ru':

            if (preg_match("/\/tracks\/(.+)\.html/i", $arr[path], $matches)) {

                $xml = simplexml_load_file("http://rutube.ru/cgi-bin/xmlapi.cgi?rt_mode=movie&rt_movie_id=".$matches[1]."&utf=1");

                if ($xml) {

                    $url = (string) $xml->response->movie->thumbnailLink;

                }

            }

            break;

        case 'video.rutube.ru':

            if (preg_match("/\/(.+)/i", $arr[path], $matches)) {

                $s[0] = substr($arr[path], 1, 2);

                $s[1] = substr($arr[path], 3, 2);

                $url = "http://tub.rutube.ru/thumbs/".$s[0]."/".$s[1]."/".$matches[1]."-1-1.jpg";

            }

            //$url = "http://img-1.rutube.ru/thumbs/".$link[0].$link[1]."/".$link[2].$link[3]."/".$link."-2.jpg";

            break;

        case 'youtube.com':

            if (preg_match("/\/(embed|v)\/(.+)\/?/i", $arr[path], $matches)) {

                $url = "http://img.youtube.com/vi/".$matches[2]."/0.jpg";

            }

            break;

        case 'player.vimeo.com':

            if (preg_match("/\/video\/(.+)\/?/i", $arr[path], $matches)) {

                $clip_id = $matches[1];

            }

            $xml = simplexml_load_file('http://vimeo.com/api/v2/video/'.$clip_id.'.xml');

            if ($xml) {

                $url = (string) $xml->video->thumbnail_medium;

            }

            break;

        case 'vimeo.com':

            parse_str($arr[query], $query);

            $clip_id = $query['clip_id'];

            $xml = simplexml_load_file('http://vimeo.com/api/v2/video/'.$clip_id.'.xml');

            if ($xml) {

                $url = (string) $xml->video->thumbnail_medium;

            }

            break;

        default:

            $url = "";

            break;

    }

    return $url;

}
Как использовать:
// вытаскиваем src видеофайла

$url = getVideoUrl ($html);

// генерируем ссылку на превьюшку

$th_url = getVideoThumbUrl ($url);

// $th_url теперь содержит ссылку на уменьшенную копию кадра из видео $url

echo '<img src="', $th_url, '" border="0" />';