ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/ebihara/prj_pnebiz/lib/include/PNE/SimplePie.php @ 557

Last change on this file since 557 was 557, checked in by ebihara, 14 years ago

create prj_pnebiz

File size: 2.8 KB
Line 
1<?php
2/**
3 * @license  GNU Lesser General Public License (LGPL)
4 * @see      simplepie.inc
5 */
6
7require_once 'simplepie.inc';
8require_once 'Snoopy.class.php';
9
10/**
11 * Wrapper class for SimplePie
12 */
13class PNE_SimplePie extends SimplePie
14{
15    /**
16     * use Snoopy instead of fopen
17     *
18     * PHP Bug #36017 fopen() crashes PHP when opening a URL in PHP4.4.2
19     * @see http://bugs.php.net/bug.php?id=36017
20     */
21    function get_file($url)
22    {
23        $snoopy = new Snoopy();
24
25        @$snoopy->fetch($url);
26        if ($snoopy->status >= 200 && $snoopy->status < 300) {
27            return str_replace("\0", '', $snoopy->results);
28        } else {
29            return false;
30        }
31    }
32
33    /**
34     * SimplePie doesn't support the following date format.
35     * - YYYY-MM-DDThh:mmTZD (i.e. not include seconds.)
36     * This modification supports the above format.
37     */
38    function parse_date($date)
39    {
40        if (preg_match('/([0-9]{2,4})-([0-9][0-9])-([0-9][0-9])T([0-9][0-9]):([0-9][0-9]):([0-9][0-9])(\.[0-9][0-9])?Z/i', $date, $matches)) {
41            if (isset($matches[7]) && substr($matches[7], 1) >= 50)
42                $matches[6]++;
43            return strtotime("$matches[1]-$matches[2]-$matches[3] $matches[4]:$matches[5]:$matches[6] -0000");
44        } else if (preg_match('/([0-9]{2,4})-([0-9][0-9])-([0-9][0-9])T([0-9][0-9]):([0-9][0-9]):([0-9][0-9])(\.[0-9][0-9])?(\+|-)([0-9][0-9]):([0-9][0-9])/i', $date, $matches)) {
45            if (isset($matches[7]) && substr($matches[7], 1) >= 50)
46                $matches[6]++;
47            return strtotime("$matches[1]-$matches[2]-$matches[3] $matches[4]:$matches[5]:$matches[6] $matches[8]$matches[9]$matches[10]");
48        } else if (preg_match('/([0-9]{2,4})-([0-9][0-9])-([0-9][0-9])T([0-9][0-9]):([0-9][0-9])Z/i', $date, $matches)) {
49            return strtotime("$matches[1]-$matches[2]-$matches[3] $matches[4]:$matches[5]:00 -0000");
50        } else if (preg_match('/([0-9]{2,4})-([0-9][0-9])-([0-9][0-9])T([0-9][0-9]):([0-9][0-9])(\+|-)([0-9][0-9]):([0-9][0-9])/i', $date, $matches)) {
51            return strtotime("$matches[1]-$matches[2]-$matches[3] $matches[4]:$matches[5]:00 $matches[6]$matches[7]$matches[8]");
52        } else {
53            return strtotime($date);
54        }
55    }
56
57    /**
58     * is_feed
59     *
60     * RSS/Atom feeds don't contain '<html'
61     * Some HTML files contain '<rdf:RDF' and don't contain '<!DOCTYPE HTML'
62     */
63    function is_feed($data, $is_url = true) {
64        if ($is_url) {
65            $data = $this->get_file($data);
66        }
67        if (stristr($data, '<!DOCTYPE HTML')) {
68            return false;
69        } elseif (stristr($data, '<html')) {
70            return false;
71        } elseif (stristr($data, '<rss') || stristr($data, '<rdf:RDF') || preg_match('/<([a-z0-9]+\:)?feed/mi', $data)) {
72            return true;
73        } else {
74            return false;
75        }
76    }
77}
78
79?>
Note: See TracBrowser for help on using the repository browser.