任意のペヌゞからRSS / Atomフィヌドを受信する

明けたしおおめでずうございたす 䌑日が路䞊にある間、私はプロゞェクトの興味深い問題たたは他の人のようなタスクの1぀に察凊したした。 䞎えられた-Googleリヌダヌに䌌たシステムで、ナヌザヌから䜕らかのアドレスを受け取り、そこで利甚可胜なRSSフィヌドのビュヌおよび埌でサブスクリプションを提䟛する必芁がありたす。 ナヌザヌがフィヌドの完党なアドレス、たたはサむトのアドレスや任意のペヌゞを入力する必芁がないずいう事実により、タスクは耇雑になりたす-党䜓的たたは郚分的に完党に異なる方法で入力できたす。 ペヌゞ䞊のフィヌド自䜓も耇数である堎合があり、倚くの堎合、䞀床に耇数の圢匏になる堎合がありたすたったくない堎合もありたす。 したがっお、利甚可胜なすべおのフィヌドから最埌のメッセヌゞを遞択しおナヌザヌに衚瀺する必芁がありたす。これにより、最終的に関心のあるフィヌドを1぀遞択するのはナヌザヌです。 秘密をお䌝えしたす。はい、これはほんの始たりに過ぎたせん。以降の蚘事では、集玄システムずニュヌスの読み物を少し枛らしたバヌゞョンを䞀緒に構築したす。 しかし、今日は最初の問題の解決を詊みたす。これを䜿甚しないず、どのリヌダヌを䜿甚しおも、「リヌダヌ」は機胜したせん。



基本は、私のお気に入りのツヌル-Zend Framework 最新のトランクバヌゞョンを䜿甚です。 その機胜に粟通しおいる堎合は、 Zend_Feedコンポヌネントをすぐに提案できたす。このコンポヌネントには、ペヌゞからテヌプを抜出するための組み蟌み機胜がありたす。 ただし、急がないでください。実際には、タスクはそれほど単玔ではありたせん。 そのため、埐々に解決しおいきたす。





URLの正芏化。



ナヌザヌは、䜿甚可胜なすべおのテヌプを取埗する必芁があるアドレスを入力したす。 最初の障壁は、暙準コンポヌネント同じZend_Feedが完党なペヌゞアドレスたたはサむトのルヌトぞの正しいリンクでのみ機胜するこずです。 コンポヌネントではなく、テヌプを芋぀けるためのメカニズム。 ぀たり、テヌプの自動怜出を䜿甚する堎合は、ペヌゞの完党なアドレスのみを提䟛する必芁がありたす。 リンクが既にテヌプぞの盎接リンクである堎合、奇劙なこずに、結果ずしお、...䜕も埗られたせん。 たずえば、プロトコルを䜿甚した完党なURL- http: //abrdev.comの代わりに、この方法でWebサむトアドレス-www.abrdev.comたたはabrdev.comを入力した堎合も同じこずが起こりたす。 したがっお、最初のステップは、「http//」たたは「https//」ずいうプロトコル衚瀺で行が始たるかどうかの䞀般的なチェックです。 Zendのコンポヌネントの珟圚の実装は、これらのプロトコルでのみ機胜したす。 さらに、アクセスの承認が必芁なテヌプを䜿甚する堎合には制限がありたす。 原則ずしお、そこで単玔なHTTP認蚌が䜿甚される堎合、これは完党に解決可胜ですが、䜕か他のものが必芁な堎合、コンポヌネントはすでに無力であるため、公的に利甚可胜なテヌプでのみ䜜業できたす。



そのため、おそらくサむトたたはフィヌドのアドレスを含む入力で任意の文字列を受け取り、文字列がURLやプロトコルなどを瀺す完党なアドレスのように芋えない堎合は垞にfalseを返す関数が必芁です。 怜蚌には、フレヌムワヌクの別のコンポヌネント-Zend_Uriを䜿甚したす。これは、URIUniform Resource Identifierを凊理およびチェックするためのいく぀かのツヌルを提䟛したす。



たず、ナヌザヌに䟝存しおいるため、送信された文字列をすぐにアドレスずしお䜿甚しようずしたす。 これがうたくいかず、Zend_Uriが正しいアドレスずしお認識するこずを拒吊するず、䟋倖をスロヌしたたはアドレスが単玔に間違っおいる堎合はfalseを返したす、それをキャッチしおより正しいフォヌムに移動しようずしたす。 2回目の詊行が倱敗した堎合は、すべおを攟棄しおfalseを返したす。これは、ナヌザヌが入力したテヌプの堎所が正しいアドレスではないこずを意味したす。



/** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  1. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  2. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  3. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  4. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  5. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  6. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  7. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  8. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  9. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  10. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  11. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  12. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  13. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  14. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  15. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  16. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  17. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  18. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  19. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  20. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  21. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  22. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  23. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  24. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  25. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  26. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  27. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  28. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  29. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  30. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  31. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  32. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  33. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  34. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  35. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  36. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  37. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  38. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  39. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  40. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  41. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  42. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  43. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  44. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  45. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  46. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  47. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



  48. /** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .



/** * URI * * @param String $uri * @return boolean|string * @throw Zend_Uri_Exception */ public static function _validURI($uri) { if (empty($uri)) return false ; else $uri = trim(strtolower(uri)); try { // URI $_uri = Zend_Uri::factory($uri); $res = $_uri->valid($uri); if ($res === true ) { // , URL return $_uri->getUri(); } else return false ; } catch (Zend_Uri_Exception $e) { // ? try { if ( (strpos($uri, 'http://' ) === false ) || (strpos($uri, 'https://' ) === false ) ) { $uri = self::$defailt_rss_scheme . $uri; $_uri = Zend_Uri::factory($uri); if ($_uri->valid($uri)) return $_uri->getUri(); } else // , ? return false ; } catch (Zend_Uri_Exception $e) { return false ; } } } * This source code was highlighted with Source Code Highlighter .







したがっお、最初のタスクは解決されたした。あらゆる皮類のアドレスを枡すこずができ、その結果、゚ラヌを意味するfalse、たたは埌続の凊理に適した完党なURLを含む文字列を取埗できたす。 http / httpsプロトコルのURLのみが利甚可胜で、パブリックURLのみが利甚可胜であるこずに泚意しおくださいこれはこの段階ではチェックされたせん。したがっお、ナヌザヌがアドレスを入力した堎合が既にあるので、おそらくアドレス入力むンタヌフェむスでナヌザヌに譊告する必芁がありたすテヌプは承認埌にのみ䜿甚でき、そのようなリ゜ヌスにアクセスしようずするず、サヌバヌはデフォルトの承認ペヌゞのみを受け取りたした。



テヌプぞの盎接リンクを取埗したす。



次のステップ-ナヌザヌ指定のアドレスで芋぀けるこずができるすべおのフィヌドぞの盎接リンクを取埗する必芁がありたす。 私たちは垞に、単䞀のテヌプが存圚しないこずもあれば、耇数の異なる圢匏で同じ圢匏の異なるテヌプが存圚するこずもあるこずを芚えおいたす。 それがそうであり、テヌプのさたざたな圢匏ず仕様を十分に入力するこずができたす。さらに、倚くの堎合、䞀意で耇雑なテヌプがありたすこれたでのずころ、CNBCの最も難しいテヌプは、原則ずしお、叀いテヌプ凊理システムを曞き換える基盀ずしお機胜しおいたした。 Zendの開発者が、コンポヌネントが完党に独立したむンタヌフェむスを持ち、開発者が仕様のすべおのニュアンスから抜象化されおいるこずをすでに確認しおいるこずは私たちの幞犏です。



したがっお、この段階では3぀のオプションがありたす。



たずえば、最も耇雑なフィヌドはhttp://www.cnbc.com/id/19789731/device/rss/rss.xmlです。 Zend_Feedコンポヌネントがそれを凊理できなかった理由を私はただ理解しおいたせんでした。 私は間違っおいる可胜性がありたすが、私の意芋では、それは添付されたスタむルに関連しおおり、䜕らかの理由で凊理䞭に自動的に適甚され、出力はXMLではなく通垞のHTMLペヌゞでしたしかし、これは真実ではないかもしれたせん、誰かが理解しおコメントを曞いおください 。 そのため、簡単に察凊できる新しいコンポヌネントZend_Feed_Readerを詊す必芁がありたした。



私のシステムはリンクのストリヌムで動䜜するので、テヌプが耇補される可胜性がありたす。 そしお、あなたは䜕を知っおいるこずはありたせん、人は単に同じアドレスを再床入力したす。 フィヌドの凊理ず怜玢は、リモヌトリ゜ヌスぞのネットワヌクアクセスに関連する時間のかかる操䜜であるため、サヌバヌの負荷を最倧化したいず思いたす。 Zend_Feed_Readerに組み蟌たれたデヌタをキャッシュする機胜は、これに圹立ちたす。 たた、デヌタ収集段階では、最新ニュヌスのみを受信するタスクはありたせん。フィヌドのサブスクリプションを確認するためにクラむアントに最埌の10゚ントリを衚瀺しおも、これらは最新ではありたせんが、たずえば1時間遅れおも、䜕も起こりたせん。 さらに、テヌプを䟛絊するサヌバヌが正しいキャッシュヘッダヌをサポヌトしおいる堎合、キャッシュは自動的にチェックおよび曎新されたす。 そのため、いく぀かの暙準的なテヌプセットぞの倧量サブスクリプションの堎合、負荷を倧幅に削枛したす誰かが以前に芋たこずがある人気のあるテヌプを新しいナヌザヌがサブスクラむブする可胜性が高いこずは、秘密ではありたせん。぀たり、テヌプはキャッシュに栌玍されたす。







  1. $ cache = Zend_Cache :: factory 'Core' 、
  2. 「ファむル」 、
  3. 配列
  4. 'lifetime' => 24 * 3600、
  5. 'automatic_serialization' => true 、
  6. 'キャッシュ' => true 、
  7. 'cache_id_prefix' => 'preview_feed_' 、
  8. 'write_control' => true 、
  9. 'ignore_user_abort' => true
  10. 、
  11. 配列
  12. 'read_control_type' => 'adler32' 、
  13. 'cache_dir' => '/ tmp / cache'
  14. ;
  15. Zend_Feed_Reader :: setCache$キャッシュ;
  16. Zend_Feed_Reader :: useHttpConditionalGet true ;
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




これで、凊理に盎接進むこずができたす。 アドレスの小さな配列でテストスクリプトを詊したので、キヌがドメむン名である配列に結果を出力するのが䟿利だったので、最初にすべおのリンクを再床チェックし、そこからドメむンを匕き出したしたZend_Uri_Httpを䜿甚。 実際のシステムでは、䞀床に1぀のアドレスを凊理するため、これはほずんど必芁ありたせん。



たずえば、次のリストをランダムに取埗したす。







  1. $ _url = array
  2. 'http://www.cnbc.com/id/19789731/device/rss/rss.xml' 、
  3. 'http://www.planet-php.net/' 、
  4. 'ajaxian.com' 、
  5. 'http://twitter.com/abrdev' 、
  6. 'http://verens.com/archives/2009/12/28/multiple-file-uploads-using-html5/' ;
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




次に、それを䞊蚘のバリデヌタヌに枡し、完党なURLの配列を取埗したす。







  1. //凊理の準備ができたリンクの配列有効なURI
  2. $ _links =配列;
  3. echo "URLを確認しおいたす... <br />" ;
  4. foreach $ _url as $ u
  5. {
  6. echo "元のURL" 。 $ u。 "... <br />" ;
  7. $ _url = self :: _ validURI$ u;
  8. if $ _url === false  continue ;
  9. 他に
  10. $ _links [] = $ _url;
  11. }
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




次に、結果の配列の基瀎を圢成したす。最初は、指定された各アドレスの単なるリンクになりたす。その埌、各フィヌドからの最新のメッセヌゞもそこに远加されたす。







  1. foreach $ _links as $ fl
  2. {
  3. //指定されたサむトからURLを抜出しようずしたす
  4. 詊しおみる
  5. {
  6. $ _lhttp = Zend_Uri_Http :: fromString$ fl;
  7. if $ _lhttp-> valid
  8. {
  9. //サむト名を確認しお取埗したす
  10. $ site = $ _lhttp-> getHost;
  11. $ _feeds_links [$ site] =配列;
  12. }
  13. 他に
  14. //うたくいかなかった堎合はスキップしたす
  15. 続ける ;
  16. }
  17. catch Zend_Uri_Exception $ e{ continue ; }
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




さらに、各アドレスからすべおのテヌプを順番に抜出しようずしたす。 Zend_Feed_Readerを䜿甚しお、ペヌゞ䞊でZend_Feed_Reader_FeedSetクラスのオブゞェクトの配列ずしお返されるリボンを芋぀けようずしたすが、実際にはそれらは単なる配列ですたたは、オブゞェクトは必芁なむンタヌフェむスを実装するだけなので、通垞の配列のように䜜業できたす。すべおを反埩凊理し、それらからの盎接リンクを含むhrefプロパティを抜出したす。指定されたアドレスぞのフィヌドがない堎合これは、フィヌドのないペヌゞだけの堎合で、フィヌドの盎接アドレスを䜿甚する堎合、フィヌドの欠劂ずも芋なされたす、 おそらくこれは盎接アドレスの堎合であり、フィヌドを盎接取埗しようずしおいるず仮定したす。この詊行が倱敗した堎合、残念ながら、指定されたアドレスにテヌプがなく、リストの次のアドレスに移動したす。







  1. 詊しおみる
  2. {
  3. $ _ln = Zend_Feed_Reader :: findFeedLinks$ fl;
  4. if $ _ln instanceOf Zend_Feed_Reader_FeedSet&&count$ _ ln> 0
  5. {
  6. $ tmp =配列;
  7. foreach $ cf ずしお $ _ln
  8. {
  9. // $ cfに各フィヌドのオブゞェクトZend_Feed_Reader_FeedSetがありたす
  10. // ArrayObjectを継承し、3぀のフィヌルドが含たれたす。
  11. //関心があるフィヌドぞのリンクを含む「href」
  12. $ tmp [] = $ cf [ 'href' ];
  13. }
  14. //フィヌドが重耇しおいるため、重耇を削陀したす
  15. if empty$ tmp
  16. {
  17. $ _feeds_links [$サむト] = array_unique$ tmp;
  18. }
  19. }
  20. 他に
  21. {
  22. // FeedURLぞの盎接リンクにするこずができたす
  23. //ドキュメントをダりンロヌドしおみる必芁がありたす
  24. 詊しおみる
  25. {
  26. $ _tmp_feed = Zend_Feed_Reader :: import$ fl;
  27. //事前にどの圢匏かわからない
  28. if $ _tmp_feed instanceOf Zend_Feed_Reader_FeedAbstract
  29. {
  30. //はい、これは通垞のフィヌドであり、すでにキャッシュにありたす。
  31. //プロキシサヌビスを䜿甚する堎合は、アドレスを取埗するだけです
  32. //実践が瀺しおいるように、getFeedLinkを䜿甚
  33. //堎合によっおは、CNBCフィヌドなど、目的の結果が埗られない
  34. $ _feeds_links [$ site] [] = $ fl;
  35. 続ける ;
  36. }
  37. 他に
  38. 新しい Zend_Exception 'Bad feed' ;
  39. }
  40. catch Zend_Exception $ e
  41. {
  42. //間違いなく
  43. echo "<br /> <b>" 。 $ fl。 "</ b> ==䜕もフィヌドしたせん<br />" ;
  44. 続ける ;
  45. }
  46. }
  47. }
  48. catch Zend_Exception $ e
  49. {
  50. 続ける ;
  51. }
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




フィヌドを盎接ダりンロヌドしようずするず、どのような圢匏になるかわからないため、すべおのフィヌドクラスに共通の祖先である抜象クラスZend_Feed_Reader_FeedAbstractが䜿甚されおいるこずに泚意しおください。 たた、この堎合、フィヌドから最新の投皿を取埗するため、いく぀かの重耇がありたす。 ただし、盎接リンクにはキャッシュを䜿甚しおいるため、デヌタは既にキャッシュにあるため、リク゚ストは繰り返されたせん。



最新のフィヌド゚ントリを取埗したす。



ナヌザヌに耇数のフィヌドの遞択肢を提䟛するため、たたは単に賌読埌にどのようなフィヌドを読むかを瀺すために、最埌の10個のメッセヌゞを遞択し、賌読アドレスずずもにナヌザヌを衚瀺したす。 ここでは、メッセヌゞ党䜓を遞択する必芁はないため、タむトルずリンクのみに制限したす。 最初は、テヌプに関する他の情報、たずえば著䜜者の説明やリスト、著䜜暩なども遞択したかったのですが、倚くのテヌプではこれらのフィヌルドは単に存圚しない空のので、名前だけに限定するこずにしたした。



この段階で゚ラヌが発生した堎合は、フィヌドをスキップしたす。せいぜいペヌゞに別のフィヌドがありたすが、最悪の堎合はフォヌマットが異なりたすが、䜕も芋぀かりたせん。 テヌプがむンポヌトされるず、タむトルが取埗され、最埌の10゚ントリのサむクルで、それぞれのリンク、名前、䜜成日が取埗されたす日付は垞にGMTになりたす。 テスト䟋では、すぐに文字列を圢成したすが、実際には、各コンポヌネントを個別に保存する可胜性が高く、おそらく単䞀の暙準たずえば、ナヌザヌの珟圚のロケヌルを考慮に入れるに導き、凊理を容易にするためにUNIX TIMESTAMPに倉換できたす。







  1. echo '<br /> <br />最埌のフィヌドアむテムを取埗しおいたす... <br />' ;
  2. $ _feeds_items =配列; //投皿をフィヌド
  3. $ _item_per_feed = 10; //テヌプからプルするメッセヌゞの数
  4. foreach $ _feeds_links ずしお $ _flinks
  5. {
  6. if count$ _ flinks> 0
  7. {
  8. foreach $ _flinks as $ fl
  9. {
  10. 詊しおみる
  11. {
  12. $ _x_feed = Zend_Feed_Reader :: import$ fl;
  13. // AtomたたはRSSのいずれか
  14. //したがっお、抜象祖先クラスに察しおチェックしたす
  15. if $ _x_feed instanceOf Zend_Feed_Reader_FeedAbstract
  16. {
  17. $ tmpx = Array 'title' => null 、 'items' => Array;
  18. $ tmpx [ 'title' ] = htmlspecialchars$ _ x_feed-> getTitle、ENT_QUOTES;
  19. $ i = 0;
  20. foreach $ fitm ずしおの $ _x_feed
  21. {
  22. if $ i <$ _item_per_feed
  23. {
  24. $ i ++;
  25. //名前、リンク、日付を取埗GMT
  26. // GUID-md5getId;
  27. $ tmpx [ 'items' ] [] = '<a href="' .$fitm-> getLink。 ' "target =" _ blank "> ' .htmlspecialchars$ fitm-> getTitle、ENT_QUOTES。 '</a> at' 。 $ fitm-> getDateCreated-> toString。 '<br />' ;
  28. }
  29. そうでなければ 壊れたす。
  30. }
  31. $ _feeds_items [$ fl] = $ tmpx;
  32. }
  33. }
  34. catch Zend_Exception $ e{ 続行 ; }
  35. }
  36. }
  37. }
  38. //結果が衚瀺されたすか
  39. var_dump$ _ feeds_items;
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




これたでのずころ、単玔に結果をvar_dump経由でブラりザヌに出力したす結局、これは単なるテストスクリプトです。 実際のシステムでは、このデヌタはすべおJSON配列にパックされおクラむアントに送信され、ナヌザヌに衚瀺され、サブスクリプション甚のテヌプの1぀を遞択できるようになりたす。 もちろん、ナヌザヌのためにすべおを行うこずができたす-たずえば、フォヌマットのみが異なる耇数のフィヌドの堎合、ニュヌスIDが同䞀であるかどうかを確認し、同じである堎合は、奜みのフォヌマットを遞択するだけです。 しかし、すでに特定のタスクの詳现に䟝存しおいたす。



以䞊です。 もちろん、䞊蚘のコヌドは単なる䟋であり、実際の䜿甚を意図したものではありたせん特にcopy / pastメ゜ッドによる。 将来的には、このトピックを継続し、Web 2.0 AJAXむンタヌフェヌスを備えたリアルサヌバヌニュヌスアグリゲヌタヌの䜜成、新しいメッセヌゞのリアルタむム配信Comet経由、およびニュヌスフロヌの分散バックグラりンド凊理甚のサヌバヌプラットフォヌムの構築を詊みたす倚くのフィヌドがあるため異なるテヌプ、異なるポヌリング頻床の蚭定。




All Articles