PHP ile Dailymotion video bilgilerini almak

Php| Yazılım

6 Şub 2010

Daha önce buradaki yazımda PHP ile YouTube linklerinden videolarının bilgilerini almayı açıklamıştım. Şimdi aynı şeyi DailyMotion’da anlatmanın sırası geldi. Olay DailyMotion’un verilen bir video linkinden o videonun başlığını, açıklamasını, videonun resmini eltmek. 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 dailymotionParse($url)
 {
 $vidparser = parse_url($url);
 $video['id'] = substr($vidparser['path'], 7);
 $urlXML = "http://www.dailymotion.com/atom/video/". $video['id'];
 $dailyValue = $this->xml2array($urlXML);
 if( $dailyValue == null)
 $video['works']="NO";
 else
 {
 preg_match_all("/<\s*img [^\>]*src\s*=\s*[\"\"']?([^\"\\'\s>]*)/i", $dailyValue['feed']['entry']['summary'], $dailyImg);
 preg_match_all("/(<p.*>)(\w.*)(<\/p>)/ismU", $dailyValue['feed']['entry']['summary'], $dailyDesc);
 $video['img'] = $dailyImg[1][0];
 $video['title'] = $dailyValue['feed']['entry']['title'];
 $video['desc'] = $this->limit_words( strip_tags( $dailyDesc[0][0] ), 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 = dailymotionParse("http://www.dailymotion.com/video/x8crzz_yylmaz-erdoyan-etme-wwwatesclupcom_music");
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'];
}

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

Yorum yaz

Aforizma

Ruh hastası olmak kolay bir iş değildir. İnsanın önce ruh sahibi olması gerekir.

Kategoriler

Polls

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

View Results

Loading ... Loading ...