Пример #1
0
 function testGetChannelInfo()
 {
     $r = new XML_RSS(dirname(__FILE__) . '/test.rss');
     $r->parse();
     $expected = array('title' => 'Test', 'link' => 'http://pear.php.net/', 'description' => 'This is a test channel for XML_RSS');
     $actual = $r->getChannelInfo();
     $this->assertEquals($expected, $actual);
 }
Пример #2
0
 /**
  * リソースリクエスト実行
  *
  * リモートURLにアクセスしてRSSだったら配列に、
  * そうでなかったらHTTP Body文字列をリソースとして扱います。
  *
  * @return BEAR_Ro
  * @throws BEAR_Resource_Execute_Exception
  */
 public function request()
 {
     $reqMethod = array();
     $reqMethod[BEAR_Resource::METHOD_CREATE] = HTTP_Request2::METHOD_POST;
     $reqMethod[BEAR_Resource::METHOD_READ] = HTTP_Request2::METHOD_GET;
     $reqMethod[BEAR_Resource::METHOD_UPDATE] = HTTP_Request2::METHOD_PUT;
     $reqMethod[BEAR_Resource::METHOD_DELETE] = HTTP_Request2::METHOD_DELETE;
     assert(isset($reqMethod[$this->_config['method']]));
     try {
         // 引数以降省略可能  config で proxy とかも設定可能
         $request = new HTTP_Request2($this->_config['uri'], $reqMethod[$this->_config['method']]);
         $request->setHeader("user-agent", 'BEAR/' . BEAR::VERSION);
         $request->setConfig("follow_redirects", true);
         if ($this->_config['method'] === BEAR_Resource::METHOD_CREATE || $this->_config['method'] === BEAR_Resource::METHOD_UPDATE) {
             foreach ($this->_config['values'] as $key => $value) {
                 $request->addPostParameter($key, $value);
             }
         }
         $response = $request->send();
         $code = $response->getStatus();
         $headers = $response->getHeader();
         if ($code == 200) {
             $body = $response->getBody();
         } else {
             $info = array('code' => $code, 'headers' => $headers);
             throw $this->_exception($response->getBody(), $info);
         }
     } catch (HTTP_Request2_Exception $e) {
         throw $this->_exception($e->getMessage());
     } catch (Exception $e) {
         throw $this->_exception($e->getMessage());
     }
     $rss = new XML_RSS($body, 'utf-8', 'utf-8');
     PEAR::setErrorHandling(PEAR_ERROR_RETURN);
     // @todo Panda::setPearErrorHandling(仮称)に変更しエラーを画面化しないようにする
     $rss->parse();
     $items = $rss->getItems();
     if (is_array($items) && count($items) > 0) {
         $body = $items;
         $headers = $rss->getChannelInfo();
         $headers['type'] = 'rss';
     } else {
         $headers['type'] = 'string';
         $body = array($body);
     }
     // UTF-8に
     $encode = mb_convert_variables('UTF-8', 'auto', $body);
     $ro = BEAR::factory('BEAR_Ro')->setBody($body)->setHeaders($headers);
     /* @var $ro BEAR_Ro */
     PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('Panda', 'onPearError'));
     return $ro;
 }
Пример #3
0
 function parseRSS($filename, $showDetails, $showDescription, $path)
 {
     global $objDatabase, $_ARRAYLANG;
     if ($showDetails == 1) {
         $objResult = $objDatabase->Execute("SELECT id, FROM_UNIXTIME(xml_refresh, '%d. %M %Y %H:%i:%s') AS xml_refresh FROM " . DBPREFIX . "module_directory_dir WHERE rss_file='" . contrexx_addslashes($filename) . "'");
         if ($objResult !== false) {
             while (!$objResult->EOF) {
                 $this->rssRefresh = $objResult->fields['xml_refresh'];
                 // Not used -- see below
                 //                    $feedId = $objResult->fields['id'];
                 $objResult->MoveNext();
             }
         }
     }
     $filename = $this->mediaPath . $path . $filename;
     //rss class
     $rss = new \XML_RSS($filename);
     $rss->parse();
     if ($showDetails == 1) {
         //channel info
         $info = $rss->getChannelInfo();
         $this->rssTitle = $info['title'];
         //image
         foreach ($rss->getImages() as $img) {
             $this->rssImage = "<img src=" . $img['url'] . " alt='' /><br />";
         }
         // TODO: Never used
         //            $image = "<a href='".CONTREXX_SCRIPT_PATH."?section=Directory&amp;linkid=$feedId' target='_blank'><img src='/images/modules/directory/rss.gif' border='0' alt='Source' /></a>&nbsp;";
         $feeds = "<b>" . $this->rssTitle . "</b><br />" . $_ARRAYLANG['TXT_DIR_LAST_UPDATE'] . ": " . $this->rssRefresh . "<br />";
     }
     //items
     $feeds .= "<ul>";
     $x = 0;
     $limit = $this->settings['xmlLimit']['value'];
     foreach ($rss->getItems() as $value) {
         if ($x < $limit) {
             $feeds .= "<li><a href='" . $value['link'] . "' target='_blank'>" . $value['title'] . "</a><br />";
             if ($showDescription == 1) {
                 $feeds .= substr($value['description'], 0, 200);
             }
             $feeds .= "</li>";
             $x++;
         }
     }
     $feeds .= "</ul>";
     return $feeds;
 }
Пример #4
0
 /**
  * Search keyword on OpenSearch compatible engine.
  *
  * @access public
  * @param  string $query keyword
  * @return array
  */
 function search($query)
 {
     $url = $this->_setupQuery($query);
     // trigger_error($url);
     $rss = new XML_RSS($url);
     array_push($rss->channelTags, 'OPENSEARCH:TOTALRESULTS', 'OPENSEARCH:STARTINDEX', 'OPENSEARCH:ITEMSPERPAGE');
     $rss->parse();
     $ch = $rss->getChannelInfo();
     if (isset($ch['opensearch:totalresults'])) {
         $this->pager_param['totalResults'] = $ch['opensearch:totalresults'];
     }
     if (isset($ch['opensearch:itemsperpage'])) {
         $this->pager_param['itemsPerPage'] = $ch['opensearch:itemsperpage'];
     }
     if (isset($ch['opensearch:startindex'])) {
         $this->pager_param['startIndex'] = $ch['opensearch:startindex'];
     }
     return $rss->getItems();
 }
Пример #5
0
 function showNewsPreview($id)
 {
     global $objDatabase, $_ARRAYLANG;
     $query = "SELECT filename,\n             FROM_UNIXTIME(time, '%d. %M %Y, %H:%i') AS time\n                      FROM " . DBPREFIX . "module_feed_news\n                     WHERE id = '" . $id . "'";
     $objResult = $objDatabase->Execute($query);
     $filename = $this->feedpath . $objResult->fields['filename'];
     //rss class
     $rss = new \XML_RSS($filename);
     $rss->parse();
     //channel info
     $info = $rss->getChannelInfo();
     echo "<b>" . strip_tags($info['title']) . "</b><br />";
     echo $_ARRAYLANG['TXT_FEED_LAST_UPDATE'] . ": " . $objResult->fields['time'] . "<br />";
     //image
     foreach ($rss->getImages() as $img) {
         if ($img['url'] != '') {
             echo '<img src="' . strip_tags($img['url']) . '" /><br />';
         }
     }
     echo '<br />';
     echo '<i>' . $_ARRAYLANG['TXT_FEED_MESSAGE_IMPORTANT'] . '</i><br />';
     //items
     foreach ($rss->getItems() as $value) {
         echo '<li>' . strip_tags($value['title']) . '</li>';
     }
 }