diff options
Diffstat (limited to 'class')
-rw-r--r-- | class/Parser.php | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/class/Parser.php b/class/Parser.php index ee052e2..3113718 100644 --- a/class/Parser.php +++ b/class/Parser.php @@ -43,6 +43,7 @@ class Parser { echo date("r : ") . $msg ."\n"; } + /** * Parse the Bugzilla ACL list from pkgdb * @@ -266,5 +267,101 @@ class Parser } return $tot; } + + /** + * Parse the PECL webservices + * + * @param TableUpstream $uptable the table to write to + * @param string $url the URL to read from + * + * @return integer number of parsed line + */ + static public function readPecl(TableUpstream $uptable, $url) + { + self::log("PECL listLatestReleases - stable"); + + $request = xmlrpc_encode_request("package.listLatestReleases", "stable"); + $context = stream_context_create( + array( + 'http' => array( + 'method' => "POST", + 'header' => "Content-Type: text/xml", + 'content' => $request + ) + ) + ); + $file = file_get_contents($url, false, $context); + if (!$file) { + self::log("Can't file_get_contents($url)"); + return 0; + } + + $stable = xmlrpc_decode($file); + if (xmlrpc_is_fault($stable)) { + self::log("ERROR xmlrpc: $stable[faultString] ($stable[faultCode])"); + } else { + $nb = $uptable->delete(array('type'=>'pecl', 'channel'=>'pecl')); + self::log("Delete $nb packages"); + + $nb=0; + foreach ($stable as $name => $info) { + $rpmname="php-pecl-".str_replace("_", "-", $name); + + $id = $uptable->record( + 'pecl', + 'pecl', + $rpmname, + $info["version"], + true + ); + if ($id) { + $nb++; + } + } + self::log("Write $nb packages"); + } + + // ------------------------------------------------------------------- + self::log("PECL listLatestReleases - unstable"); + + $request = xmlrpc_encode_request("package.listLatestReleases", array()); + $context = stream_context_create( + array( + 'http' => array( + 'method' => "POST", + 'header' => "Content-Type: text/xml", + 'content' => $request + ) + ) + ); + $file = file_get_contents($url, false, $context); + if (!$file) { + self::log("Can't file_get_contents($url)"); + return 0; + } + $unstable = xmlrpc_decode($file); + if (xmlrpc_is_fault($unstable)) { + self::log("ERROR xmlrpc: $stable[faultString] ($stable[faultCode])"); + } else { + $nb=0; + foreach ($unstable as $name => $info) { + $rpmname="php-pecl-".str_replace("_", "-", $name); + + $id = $uptable->record( + 'pecl', + 'pecl', + $rpmname, + $info["version"], + true, + $info["state"] + ); + if ($id) { + $nb++; + } + } + self::log("Write $nb packages"); + } + return $nb; + } } ?>
\ No newline at end of file |