PHP ile YouTube'den video ile ilgili bilgi alma

Php| Yazılım

27 Ara 2009

Kendi geliştirdiğiniz uygulamanızda kullanıcılarınızın veya sizin gireceğiniz YouTube linkinden(örnek: http://www.youtube.com/watch?v=0peX66dC6Sk) o videonun başlığını, açıklamasını, videonun resmini elde edip bunu kullanmak isteyebilirsiniz. Yeni projemde bu tip bir olayla karşılaşınca araştırma yaptım, çeşitli kodlar denedim ve sonunda oluşturduğum sentez PHP fonksiyonla bu işlemlerin hepsini yapabilecek duruma geldim.

function youtubeParse($url)
{
$vidparser = parse_url($url);
$video['id'] = substr($vidparser['query'], 2);
$urlXML = "http://gdata.youtube.com/feeds/api/videos/". $video['id'];
$youtubeValue = xml2array($urlXML);
if( $youtubeValue == null)
$video['works']="NO";
else
{
$video['title'] = iconv("UTF-8", "ISO-8859-9", $youtubeValue['entry']['title']);
$desc = $youtubeValue['entry']['content'];
$video['img'] = "http://img.youtube.com/vi/" . $video['id'] . "/1.jpg";
$video['desc'] = $this->limit_words(iconv("UTF-8", "ISO-8859-9", $desc), 15);
}

return $video;
}

Öncelikle bu fonksiyonun çalışması için 6. satırdaki xml2array() fonksiyonunun da kodlarınız arasında olması gerekir. Bu fonksiyon php.net’ten bulduğum herhangi bir XML’i PHP arraya dönüştüren fonksiyondan birisi. Bu fonksiyonu diğer XML veriler için de kullanabilirsiniz.


    function xml2array($url, $get_attributes = 1, $priority = 'tag')
    {
        $contents = "";
        if (!function_exists('xml_parser_create'))
        {
            return array ();
        }
        $parser = xml_parser_create('');
        if (!($fp = @ fopen($url, 'rb')))
        {
            return array ();
        }
        while (!feof($fp))
        {
            $contents .= fread($fp, 8192);
        }
        fclose($fp);
        xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
        xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
        xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
        xml_parse_into_struct($parser, trim($contents), $xml_values);
        xml_parser_free($parser);
        if (!$xml_values)
            return; //Hmm...
        $xml_array = array ();
        $parents = array ();
        $opened_tags = array ();
        $arr = array ();
        $current = & $xml_array;
        $repeated_tag_index = array ();
        foreach ($xml_values as $data)
        {
            unset ($attributes, $value);
            extract($data);
            $result = array ();
            $attributes_data = array ();
            if (isset ($value))
            {
                if ($priority == 'tag')
                    $result = $value;
                else
                    $result['value'] = $value;
            }
            if (isset ($attributes) and $get_attributes)
            {
                foreach ($attributes as $attr => $val)
                {
                    if ($priority == 'tag')
                        $attributes_data[$attr] = $val;
                    else
                        $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
                }
            }
            if ($type == "open")
            {
                $parent[$level -1] = & $current;
                if (!is_array($current) or (!in_array($tag, array_keys($current))))
                {
                    $current[$tag] = $result;
                    if ($attributes_data)
                        $current[$tag . '_attr'] = $attributes_data;
                    $repeated_tag_index[$tag . '_' . $level] = 1;
                    $current = & $current[$tag];
                }
                else
                {
                    if (isset ($current[$tag][0]))
                    {
                        $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
                        $repeated_tag_index[$tag . '_' . $level]++;
                    }
                    else
                    {
                        $current[$tag] = array (
                            $current[$tag],
                            $result
                        );
                        $repeated_tag_index[$tag . '_' . $level] = 2;
                        if (isset ($current[$tag . '_attr']))
                        {
                            $current[$tag]['0_attr'] = $current[$tag . '_attr'];
                            unset ($current[$tag . '_attr']);
                        }
                    }
                    $last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1;
                    $current = & $current[$tag][$last_item_index];
                }
            }
            elseif ($type == "complete")
            {
                if (!isset ($current[$tag]))
                {
                    $current[$tag] = $result;
                    $repeated_tag_index[$tag . '_' . $level] = 1;
                    if ($priority == 'tag' and $attributes_data)
                        $current[$tag . '_attr'] = $attributes_data;
                }
                else
                {
                    if (isset ($current[$tag][0]) and is_array($current[$tag]))
                    {
                        $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
                        if ($priority == 'tag' and $get_attributes and $attributes_data)
                        {
                            $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
                        }
                        $repeated_tag_index[$tag . '_' . $level]++;
                    }
                    else
                    {
                        $current[$tag] = array (
                            $current[$tag],
                            $result
                        );
                        $repeated_tag_index[$tag . '_' . $level] = 1;
                        if ($priority == 'tag' and $get_attributes)
                        {
                            if (isset ($current[$tag . '_attr']))
                            {
                                $current[$tag]['0_attr'] = $current[$tag . '_attr'];
                                unset ($current[$tag . '_attr']);
                            }
                            if ($attributes_data)
                            {
                                $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
                            }
                        }
                        $repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken
                    }
                }
            }
            elseif ($type == 'close')
            {
                $current = & $parent[$level -1];
            }
        }
        return ($xml_array);
    }

Bundan sonra kendi kodlarınız içinde youtubeParse() fonksiyonunu çağırıp bir değişkene atadığınızda, o array değişkeninin içeriğini kullanarak amacınıza ulaşmış olursunuz.

$result = youtubeParse("http://www.youtube.com/watch?v=0peX66dC6Sk");
if ( $result['works'] == "NO" )
echo "Video bulunamadı";
else
{
//videonun başlığı
echo $result['title'];

//videonun açıklaması, türkçe karaktere göre düzenlenmiştir
echo $result['desc'];

//videonun resmi
echo $result['img'];
}

Fonksiyonda YouTube videosunun resmini alırken 1.jpg’yi kullandık. Eğer alternatif resimleri almak istiyorsanız, 0.jpg, 1.jpg, 3.jpg’yi deneyebilirsiniz. 0.jpg büyük resim olup 1., 2. ve 3. resimler küçük alternatif resimlerdir.

Temel olarak yaptığımız şey, her videoya ait RSS beslemesine girip oradaki bilgileri işimize yarayacak şekilde elemek oldu(parse).

1 Yorum var

Avatar

PHP ile Dailymotion video bilgilerini almak - Çağdaş Polat

18 Şubat 2010 at 13:33

[...] önce buradaki yazımda PHP ile YouTube linklerinden videolarının bilgilerini almayı açıklamıştım. Şimdi aynı [...]

Yorum yaz

Aforizma

Sakladığın bir sır senin esirindir. Açığa vurursan sen onun esiri olursun. — Hz. Ali

Kategoriler

Polls

Tekel işçileri eylemi hakkında ne düşünüyorsunuz?

View Results

Loading ... Loading ...