com web/bugs: Provide search results in RSS format: templates/search-rdf.php templates/search-rss2.php www/rss/search.php

From: Date: Thu, 17 Sep 2015 06:44:53 +0000
Subject: com web/bugs: Provide search results in RSS format: templates/search-rdf.php templates/search-rss2.php www/rss/search.php
Groups: php.webmaster 
Request: Send a blank email to php-webmaster+get-24148@lists.php.net to get a copy of this message
Commit: 432aab7e2c1f1fa41f78dfeeb55aa022a9fc9190 Author: Sobak <msobaczewski@gmail.com> Thu, 17 Sep 2015 08:44:53 +0200 Parents: a25244842d0df20cce89e2947a02cc1bc2fb7bd2 Branches: master Link: http://git.php.net/?p=web/bugs.git;a=commitdiff;h=432aab7e2c1f1fa41f78dfeeb55aa022a9fc9190 Log: Provide search results in RSS format Actually it should already exist - there is reference for it in search results' HTML and also 'format' var in the URL. It's going to be used e.g. on doc.php.net Changed paths: A templates/search-rdf.php A templates/search-rss2.php M www/rss/search.php

diff --git a/templates/search-rdf.php b/templates/search-rdf.php new file mode 100644 index 0000000..fd67fdf --- /dev/null +++ b/templates/search-rdf.php @@ -0,0 +1,73 @@ +<?php +header('Content-type: text/xml'); + +echo '<?xml version="1.0"?> +<?xml-stylesheet +href="http://www.w3.org/2000/08/w3c-synd/style.css" type="text/css" +?> +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" +xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" +xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/">'; +echo "\n <channel rdf:about=\"{$site_method}://{$site_url}{$basedir}/rss/search.php\">\n"; +echo " <title>{$siteBig} Bug Search Results</title>\n"; +echo " <link>{$site_method}://{$site_url}{$basedir}/rss/search.php?" , clean(http_build_query($_GET)) , "</link>\n"; +echo " <description>Search Results</description>\n"; +echo " <dc:language>en-us</dc:language>\n"; +echo " <dc:creator>{$site}-webmaster@lists.php.net</dc:creator>\n"; +echo " <dc:publisher>{$site}-webmaster@lists.php.net</dc:publisher>\n"; +echo " <admin:generatorAgent rdf:resource=\"{$site_method}://{$site_url}{$basedir}\"/>\n"; +echo " <sy:updatePeriod>hourly</sy:updatePeriod>\n"; +echo " <sy:updateFrequency>1</sy:updateFrequency>\n"; +echo " <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>\n"; +echo ' <items> + <rdf:Seq> +'; + +$items = ''; +if ($total_rows > 0) { + foreach ($res->fetchAll(MDB2_FETCHMODE_ASSOC) as $row) { + $desc = "{$row['package_name']} ({$row['bug_type']})\nReported by "; + if (preg_match('/@php.net$/i', $row['email'])) { + $desc .= substr($row['email'], 0, strpos($row['email'], '@')) ."\n"; + } else { + $desc .= substr($row['email'], 0, strpos($row['email'], '@')) . "@...\n"; + } + $desc .= date(DATE_ATOM, $row['submitted']) . "\n"; + $desc .= "PHP: {$row['php_version']}, OS: {$row['php_os']}\n\n"; + $desc .= $row['ldesc']; + $desc = '<pre>' . clean($desc) . '</pre>'; + + echo " <rdf:li rdf:resource=\"{$site_method}://{$site_url}{$basedir}/{$row['id']}\" />\n"; + $items .= " <item rdf:about=\"{$site_method}://{$site_url}{$basedir}/{$row['id']}\">\n"; + $items .= ' <title>' . clean("{$row['bug_type']} {$row['id']} [{$row['status']}] {$row['sdesc']}") . "</title>\n"; + $items .= " <link>{$site_method}://{$site_url}{$basedir}/{$row['id']}</link>\n"; + $items .= ' <content:encoded><![CDATA[' . $desc . "]]></content:encoded>\n"; + $items .= ' <description><![CDATA[' . $desc . "]]></description>\n"; + if (!$row['unchanged']) { + $items .= ' <dc:date>' . date(DATE_ATOM, $row['submitted']) . "</dc:date>\n"; + } else { + $items .= ' <dc:date>' . date(DATE_ATOM, $row['modified']) . "</dc:date>\n"; + } + $items .= ' <dc:creator>' . clean(spam_protect($row['email'])) . "</dc:creator>\n"; + $items .= ' <dc:subject>' . clean($row['package_name']) . ' ' . clean($row['bug_type']) . "</dc:subject>\n"; + $items .= " </item>\n"; + } +} else { + $warnings[] = "No bugs matched your criteria"; +} + +echo <<< DATA + </rdf:Seq> + </items> + </channel> + + <image rdf:about="{$site_method}://{$site_url}{$basedir}/images/{$site}-logo.gif"> + <title>{$siteBig} Bugs</title> + <url>{$site_method}://{$site_url}{$basedir}/images/{$site}-logo.gif</url> + <link>{$site_method}://{$site_url}{$basedir}</link> + </image> + +{$items} +DATA; +?> +</rdf:RDF> \ No newline at end of file diff --git a/templates/search-rss2.php b/templates/search-rss2.php new file mode 100644 index 0000000..3a7b0b0 --- /dev/null +++ b/templates/search-rss2.php @@ -0,0 +1,25 @@ +<?php +header('Content-type: application/rss+xml'); +echo '<?xml version="1.0"?>' . "\n"; +?> +<rss version="2.0"> + <channel> + <title><?php echo $siteBig; ?> Bug Search Results</title> +<?php echo " <link>{$site_method}://{$site_url}{$basedir}/rss/search.php?" , clean(http_build_query($_GET)) , "</link>\n"; ?> + <description>Search Results</description> +<?php +if ($total_rows > 0) { + foreach ($res->fetchAll(MDB2_FETCHMODE_ASSOC) as $row) { + echo " <item>\n"; + echo ' <title>' . clean($row['sdesc']) . "</title>\n"; + echo " <link>{$site_method}://{$site_url}{$basedir}/{$row['id']}</link>\n"; + echo " <category>{$row['status']}</category>\n"; + echo ' <pubDate>' . date(DATE_RSS, $row['submitted']) . "</pubDate>\n"; + echo " </item>\n"; + } +} else { + $warnings[] = "No bugs matched your criteria"; +} +?> + </channel> +</rss> \ No newline at end of file diff --git a/www/rss/search.php b/www/rss/search.php index 3855642..c5b6d6c 100644 --- a/www/rss/search.php +++ b/www/rss/search.php @@ -13,8 +13,16 @@ * ported by Gregory Beaver <cellog@php.net> */ +$format = (isset($_GET['format']) && $_GET['format'] === 'rss2') ? 'rss2' : 'rdf'; + // Maximum number of bugs to return -define ('MAX_BUGS_RETURN', 150); +if ($format === 'rss2') { + // RSS channel shows way more data (e.g. no bug description) thus + // we can fetch more rows + define ('MAX_BUGS_RETURN', 500); +} else { + define ('MAX_BUGS_RETURN', 150); +} // Obtain common includes require_once '../../include/prepend.php'; @@ -28,79 +36,12 @@ if (!isset($res)) { $total_rows = $dbh->prepare('SELECT FOUND_ROWS()')->execute()->fetchOne(); } -header('Content-type: text/xml'); - -echo '<?xml version="1.0"?> -<?xml-stylesheet -href="http://www.w3.org/2000/08/w3c-synd/style.css" type="text/css" -?> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" -xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" -xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/">'; -echo "\n <channel rdf:about=\"{$site_method}://{$site_url}{$basedir}/rss/search.php\">\n"; -echo " <title>{$siteBig} Bug Search Results</title>\n"; -echo " <link>{$site_method}://{$site_url}{$basedir}/rss/search.php?" , clean(http_build_query($_GET)) , "</link>\n"; -echo " <description>Search Results</description>\n"; -echo " <dc:language>en-us</dc:language>\n"; -echo " <dc:creator>{$site}-webmaster@lists.php.net</dc:creator>\n"; -echo " <dc:publisher>{$site}-webmaster@lists.php.net</dc:publisher>\n"; -echo " <admin:generatorAgent rdf:resource=\"{$site_method}://{$site_url}{$basedir}\"/>\n"; -echo " <sy:updatePeriod>hourly</sy:updatePeriod>\n"; -echo " <sy:updateFrequency>1</sy:updateFrequency>\n"; -echo " <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>\n"; -echo ' <items> - <rdf:Seq> -'; - -$items = ''; -if ($total_rows > 0) { - foreach ($res->fetchAll(MDB2_FETCHMODE_ASSOC) as $row) { - $desc = "{$row['package_name']} ({$row['bug_type']})\nReported by "; - if (preg_match('/@php.net$/i', $row['email'])) { - $desc .= substr($row['email'], 0, strpos($row['email'], '@')) ."\n"; - } else { - $desc .= substr($row['email'], 0, strpos($row['email'], '@')) . "@...\n"; - } - $desc .= date(DATE_ATOM, $row['submitted']) . "\n"; - $desc .= "PHP: {$row['php_version']}, OS: {$row['php_os']}\n\n"; - $desc .= $row['ldesc']; - $desc = '<pre>' . clean($desc) . '</pre>'; - - echo " <rdf:li rdf:resource=\"{$site_method}://{$site_url}{$basedir}/{$row['id']}\" />\n"; - $items .= " <item rdf:about=\"{$site_method}://{$site_url}{$basedir}/{$row['id']}\">\n"; - $items .= ' <title>' . clean("{$row['bug_type']} {$row['id']} [{$row['status']}] {$row['sdesc']}") . "</title>\n"; - $items .= " <link>{$site_method}://{$site_url}{$basedir}/{$row['id']}</link>\n"; - $items .= ' <content:encoded><![CDATA[' . $desc . "]]></content:encoded>\n"; - $items .= ' <description><![CDATA[' . $desc . "]]></description>\n"; - if (!$row['unchanged']) { - $items .= ' <dc:date>' . date(DATE_ATOM, $row['submitted']) . "</dc:date>\n"; - } else { - $items .= ' <dc:date>' . date(DATE_ATOM, $row['modified']) . "</dc:date>\n"; - } - $items .= ' <dc:creator>' . clean(spam_protect($row['email'])) . "</dc:creator>\n"; - $items .= ' <dc:subject>' . clean($row['package_name']) . ' ' . clean($row['bug_type']) . "</dc:subject>\n"; - $items .= " </item>\n"; - } +if ($format === 'rss2') { + require "{$ROOT_DIR}/templates/search-rss2.php"; } else { - $warnings[] = "No bugs matched your criteria"; + require "{$ROOT_DIR}/templates/search-rdf.php"; } -echo <<< DATA - </rdf:Seq> - </items> - </channel> - - <image rdf:about="{$site_method}://{$site_url}{$basedir}/images/{$site}-logo.gif"> - <title>{$siteBig} Bugs</title> - <url>{$site_method}://{$site_url}{$basedir}/images/{$site}-logo.gif</url> - <link>{$site_method}://{$site_url}{$basedir}</link> - </image> - -{$items} -DATA; -?> -</rdf:RDF> -<?php if (count($warnings) > 0) { echo "<!--\n\n"; echo "The following warnings occured during your request:\n\n";
« previous php.webmaster (#24148) next »