RSS-каналы и извлечение изображений - PullRequest
0 голосов
/ 25 сентября 2010

Я потратил время, пытаясь решить эту проблему, и это так далеко, как я получил. в основном я пытаюсь получить изображения из RSS-каналов. я использую сорока для обработки каналов, как показано ниже .. этот фрагмент находится в классе

function getImagesUrl($str) {
    $a = array();
    $pos = 0;
    $topos;
    $init = 1;

    while($init) {
        $pos = strpos($str, "img",  $pos);
        if($pos != FALSE) {
            $topos = strpos($str, ">", $pos);
            $imagetag = substr($str, $pos, ($topos - $pos));
            $url = $this->getImageUrl($imagetag);
            $pos = $topos;
            array_push($a, $url);
        }
        else {
            $init = 0;
        }
    }
    return $a;
}


/*
 * get the full url inside src atribute in <img>
*/
function getImageUrl($image) {
    $p = strpos($image, "src=", 0);
    $p+= 5; // remove o src="
    $tp = strpos($image, '" ', $p);
    $str = substr($image, $p, ($tp - $p));
    return $str;
}                

используя вышеупомянутые функции ... я называю их так ... пока это выводит данные, которые я вставлю позже

            @$rss = fetch_rss($rsso->url);
            if (@$rss)
                {
                $items=$rss->items;
                  foreach ($items as $item ) 
                    {
                    if (isset($item['title'])&&isset($item['description']))
                        {
                    $hash=md5($this->es($item['title']).$this->es($item['description']));
                     $content = $item['content'];
                    foreach($content as $c) {
                        // get the images on content
                        $arr = $this->getImagesUrl($c);
                        print_r($arr);
                        }

вот пример вывода

 1. Array ( [0] =>
    http://api.tweetmeme.com/imagebutton.gif?url=http://mashable.com/2010/09/25/trailmeme/
    [1] =>
    http://cdn.mashable.com/wp-content/plugins/wp-digg-this/i/gbuzz-feed.png
    [2] =>
    http://mashable.com/wp-content/plugins/wp-digg-this/i/fb.jpg
    [3] =>
    http://mashable.com/wp-content/plugins/wp-digg-this/i/diggme.png
    [4] =>
    http://ec.mashable.com/wp-content/uploads/2009/01/bizspark2.gif
    [5] =>
    http://cdn.mashable.com/wp-content/uploads/2010/09/web.png
    [6] =>
    http://mashable.com/wp-content/uploads/2010/09/Screen-shot-2010-09-24-at-10.51.26-PM.png
    [7] =>
    http://cdn.mashable.com/wp-content/uploads/2009/02/bizspark.jpg
    [8] =>
    http://feedads.g.doubleclick.net/~at/lxx00QTjYBaYojpnpnTa6MXUmh4/0/di
    [9] => [10] =>
    http://feedads.g.doubleclick.net/~at/lxx00QTjYBaYojpnpnTa6MXUmh4/1/di
    [11] => [12] =>
    http://feeds.feedburner.com/~ff/Mashable?i=0N_mvMwPHYk:j5Pmi_N-JQ8:D7DqB2pKExk [13] => [14] =>
    http://feeds.feedburner.com/~ff/Mashable?i=0N_mvMwPHYk:j5Pmi_N-JQ8:V_sGLiPBpWU [15] => [16] =>
    http://feeds.feedburner.com/~ff/Mashable?i=0N_mvMwPHYk:j5Pmi_N-JQ8:F7zBnMyn0Lo [17] => [18] =>
    http://feeds.feedburner.com/~ff/Mashable?d=qj6IDK7rITs
    [19] => [20] =>
    http://feeds.feedburner.com/~ff/Mashable?d=_e0tkf89iUM
    [21] => [22] =>
    http://feeds.feedburner.com/~ff/Mashable?i=0N_mvMwPHYk:j5Pmi_N-JQ8:gIN9vFwOqvQ [23] => [24] =>
    http://feeds.feedburner.com/~ff/Mashable?d=yIl2AUoC8zA
    [25] => [26] =>
    http://feeds.feedburner.com/~ff/Mashable?d=P0ZAIrC63Ok
    [27] => [28] =>
    http://feeds.feedburner.com/~ff/Mashable?d=I9og5sOYxJI
    [29] => [30] =>
    http://feeds.feedburner.com/~ff/Mashable?d=CC-BsrAYo0A
    [31] => [32] =>
    http://feeds.feedburner.com/~ff/Mashable?i=0N_mvMwPHYk:j5Pmi_N-JQ8:_cyp7NeR2Rw [33] => [34] =>
    http://feeds.feedburner.com/~r/Mashable/~4/0N_mvMwPHYk
    )

Есть ли способ, которым я могу отфильтровать правильный URL для изображения? например .... я хотел бы удалить URL-адреса без расширений "jpg, png, gif" и т. д. во-вторых, я хотел бы удалить URL-адреса с помощью, например, bizspark, digg, facebook, твит, твиттер и т. д. кто-нибудь нашел любой более простой способ сделать это? пожалуйста, помогите мне

1 Ответ

0 голосов
/ 21 ноября 2010

Я разместил ответ на ваш связанный вопрос здесь: Извлечение изображений из каналов rss / atom с использованием сороки rss

Чтобы применить этот ответ к приведенному выше коду, сначала внесите изменения в rss_parseв соответствии с моим предыдущим ответом.Тогда вы можете просто получить доступ к URL-адресам изображений через Сороку (вместо того, чтобы писать какие-либо дополнительные функции), например,

// Your code
@$rss = fetch_rss($rsso->url);
if (@$rss)
{
   $items=$rss->items;
   foreach ($items as $item ) 
   {
      if (isset($item['title'])&&isset($item['description']))
      {
         // START MY EDIT
         if (isset($item['enclosure_type']) && isset($item['enclosure_url'])){
            switch ($item['enclosure_type']){
               case "image/gif":
               case "image/jpeg":
               case "image/png":
                   $image_url=$item['enclosure_url'];
                   $image_length=$item['enclosure_length'];
                   break;
            }
         }
         //END MY EDIT
       }
   }
}

И это все!Вам просто нужно использовать переменную $ image_url для отображения вашего изображения (конечно, в теге img: -)

Я проверил только изображения jpg, gif и png в приведенном выше коде, так как они наиболеепопулярный, но вы можете добавить другие типы пантомимы к коммутатору, если вам нужно.Просто имейте в виду, что тип оболочки задается создателем RSS-канала, а не читается из файла, поэтому он может быть неточным.Возможно, вы захотите использовать exif_imagetype () в самом файле изображения, чтобы убедиться, что это действительно изображение.

Надеюсь, это поможет, если еще не слишком поздно!

...