Проблема API поиска Yahoo - PullRequest
       20

Проблема API поиска Yahoo

1 голос
/ 22 апреля 2011

У меня проблема с API поиска Yahoo, иногда он работает, а иногда нет, почему у меня проблемы с этим

Я использую этот URL

http://api.search.yahoo.com/WebSearchService/rss/webSearch.xml?appid=yahoosearchwebrss&query=originurlextension%3Apdf+$search&adult_ok=1&start=$start

Код приведен ниже:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
<? $search = $_GET["search"]; 
$replace = " "; $with = "+"; 
$search = str_replace($replace, $with, $search);
if ($rs =
    $rss->get("http://api.search.yahoo.com/WebSearchService/rss/webSearch.xml?appid=yahoosearchwebrss&query=originurlextension%3Apdf+$search&adult_ok=1&start=$start")
    )
    {   }   
    // Go through the list powered by the search engine listed and get
    // the data from each <item>
    $colorCount="0";
    foreach($rs['items'] as $item)      {       // Get the title of result     
       $title = $item['title'];     // Get the description of the result
       $description = $item['description'];     // Get the link eg amazon.com 
       $urllink = $item['guid'];   
       if($colorCount%2==0) { 
         $color = ROW1_COLOR; 
       } else { 
          $color = ROW2_COLOR; 
       }   
       include "resulttemplate.php"; $colorCount++; 
       echo "\n";  
    }  
 ?>

Иногда это дает результаты, а иногда нет.Я получаю эту ошибку обычно

Предупреждение: неверный аргумент указан для foreach () в /home4/thesisth/public_html/pdfsearchmachine/classes/rss.php в строке 14

Может ли кто-нибудь помочь ..

1 Ответ

0 голосов
/ 23 апреля 2011

Ошибка Warning: Invalid argument supplied for foreach() in /home4/thesisth/public_html/pdfsearchmachine/classes/rss.php on line 14 означает, что конструкция foreach не получила итерацию (обычно массив). Что в вашем случае означало бы, что $rs['items'] пусто ... возможно, поиск не дал результатов?

Я бы рекомендовал сначала добавить несколько проверок к результатам $rss->get("..."), а также выполнить действие, если запрос не выполняется или не возвращает результатов:

<?php
$search = isset($_GET["search"]) ? $_GET["search"] : "default search term";
$start = "something here"; // This was left out of your original code
$colorCount = "0";
$replace = " ";
$with = "+"; 
$search = str_replace($replace, $with, $search);
$rs = $rss->get("http://api.search.yahoo.com/WebSearchService/rss/webSearch.xml?appid=yahoosearchwebrss&query=originurlextension%3Apdf+$search&adult_ok=1&start=$start");

if (isset($rs) && isset($rs['items'])) {
    foreach ($rs['items'] as $item) {
        $title       = $item['title'];       // Get the title of the result
        $description = $item['description']; // Get the description of the result 
        $urllink     = $item['guid'];        // Get the link eg amazon.com
        $color       = ($colorCount % 2) ? ROW2_COLOR : ROW1_COLOR; 
        include "resulttemplate.php";
        echo "\n";
        $colorCount++; 
    }
}
else {
    echo "Could not find any results for your search '$search'";
}

Другие изменения:

  • $ start не был объявлен до вашего $rss->get("...") вызова
  • включил выражение $color if / else в троичную операцию с меньшим количеством сравнений
  • Я не был уверен, какова цель if ($rs = $rss->get("...")) { }, поэтому я удалил его.

Я бы также рекомендовал использовать require вместо include, поскольку это приведет к фатальной ошибке, если resulttemplate.php не существует, что, на мой взгляд, является лучшим способом обнаружения ошибок, чем предупреждения PHP, которые будут продолжать выполнение , Однако я не знаю всей вашей ситуации, так что она может оказаться бесполезной.

Надеюсь, это поможет!

Приветствия

...