From 89d575a5d6af82a1f686f6314533ec94479eea1f 2017-06-12 23:43:31 From: DarkMorford Date: 2017-06-12 23:43:31 Subject: [PATCH] Add scripts to generate RSS feeds. --- diff --git a/rss/.htaccess b/rss/.htaccess new file mode 100644 index 0000000..9a2aeb1 --- /dev/null +++ b/rss/.htaccess @@ -0,0 +1,10 @@ + + RewriteEngine On + RewriteBase /rss/ + RewriteRule ^index.php$ rss.php + RewriteRule ^megatokyo.xml$ rss.php + RewriteRule ^strips.xml$ rss.php?type=strips + RewriteRule ^rants.xml$ rss.php?type=rants + RewriteRule ^status.xml$ rss.php?type=status + Header set X-Powered-By Nikuman + diff --git a/rss/index.php b/rss/index.php new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/rss/index.php diff --git a/rss/rss.old.php b/rss/rss.old.php new file mode 100644 index 0000000..587991e --- /dev/null +++ b/rss/rss.old.php @@ -0,0 +1,183 @@ + $entity){ + $mapping[$entity] = '&#' . ord($char) . ';'; + } + return str_replace(array_keys($mapping), $mapping, $string); +} + +function Excerpt( $excerpt ) { + $excerpt = strip_tags( $excerpt ); + if (strlen($excerpt) > 455) { + $excerpt = substr($excerpt,0,452) . '...'; + } + return $excerpt; +} + +function datesort( $a , $b ) { + if( $a->udate == $b->udate ) return 0; + return( $a->udate > $b->udate ) ? -1 : 1; +} + +function utfentities($string) +{ + return htmlentities($string, ENT_COMPAT, 'UTF-8'); +} + +function _query( $s, $byid = false ) { + global $link; + $r = mysqli_query($link, $s ) or die( mysqli_error($link) ); + $ret=array(); + $i=0; + + if( $byid ) { + while ($row = mysqli_fetch_object($r) ) + $ret[$row->id] = $row; + } else { + while ($row = mysqli_fetch_object($r) ) + $ret[$i++] = $row; + } + return $ret; +} + +@$f_title = $type = $_GET['type']; + +$f_items = array(); +$f_desc = 'News and Comics from Megatokyo.'; + +/*if( $type == 'status' or $type == '') { + // Status Box Updates + $f_title = 'Megatokyo Status Updates'; + $s = _query( "SELECT MAX(id)+1 as m FROM strip" ); // Permalinks to strips? + + $s = _query( "SELECT DISTINCT SUBTIME( published, eta ) as dd, UNIX_TIMESTAMP(published) as udate, text, UNIX_TIMESTAMP(eta) as eta, percentage + FROM status s + ORDER BY udate DESC + LIMIT 5"); + foreach( $s as $k=>$v ) { + $s[$k]->link = 'http://www.megatokyo.com/'; + $s[$k]->title = "Update: $v->percentage%: " . htmlentities($v->text, ENT_COMPAT, ini_get('default_charset')); + + $d = date( 'l F jS, H:i', $v->eta ); + $dd = (int) (( $v->eta - $v->udate )/3600); + + $s[$k]->desc = "$v->percentage% complete. +
Next comic should be posted at: $d. ($dd hours)]]>"; + $s[$k]->date = date( DATE_RFC822, $v->udate ); + $s[$k]->guid = $s[$k]->link; + } + $f_items = array_merge( $f_items, $s ); +}*/ + +if( $type == 'strips' or $type == '') { + $f_title = 'Megatokyo Comics'; + $s = _query("SELECT DISTINCT s.id, UNIX_TIMESTAMP(s.published) as udate, t.description as chapdesc, t.name as chapname, s.title + FROM media_t media, strip s, strip_t t + WHERE s.media = media.id AND s.published < NOW() + AND s.type = t.id + ORDER BY s.id DESC LIMIT 5") or die(mysqli_error($link)); + foreach($s as $k=>$v) { + $s[$k]->link = SITE_HOST . SITE_PATH . "/strip/$v->id"; + #$s[$k]->title = "Comic [$v->id] \"" . utfentities($v->title, ENT_COMPAT, ini_get('default_charset')) . '"'; + $s[$k]->title = "Comic [$v->id] \"" . numeric_entities(utfentities($v->title)) . '"'; + $s[$k]->desc = "chapdesc comic $v->id +
[read...] +
[link . "\">permalink] + ]]>"; + $s[$k]->date = date( DATE_RFC822, $v->udate ); + $s[$k]->guid = $s[$k]->link; + } + $f_items = array_merge( $f_items, $s ); +} + +if( $type == 'rants' or $type == '' ) { + $f_title = 'Megatokyo Rants'; + $contributers = _query("SELECT * FROM contributor", true); + $s = _query("SELECT r.id, r.body as body, UNIX_TIMESTAMP(r.published) as udate, r.author as authorno, r.title + FROM rant r + WHERE r.published < NOW() + AND r.status = 'published' + ORDER BY udate DESC LIMIT 5"); + foreach($s as $k=>$v) { + $s[$k]->link = SITE_HOST . SITE_PATH . "/rant/$v->id"; + $s[$k]->author = utfentities( $contributers[$v->authorno]->name, ENT_COMPAT, ini_get('default_charset') ); + $s[$k]->title = "Rant [$v->id] \"" . utfentities($v->title, ENT_COMPAT, ini_get('default_charset')) . '"'; + $s[$k]->desc = "body) . "

[link . "\">permalink]

]]>"; + $s[$k]->date = date( DATE_RFC822, $v->udate ); + $s[$k]->guid = $s[$k]->link; + } + $f_items = array_merge( $f_items, $s ); +} + +if( $type == '' ) +{ + $f_title = 'Megatokyo Comics and News'; + $s = _query("SELECT UNIX_TIMESTAMP(published) as udate, body, url FROM rss_comment ORDER BY published DESC LIMIT 5"); + + foreach($s as $k=>$v) + { + $s[$k]->link = $v->url; + $s[$k]->title = $v->body; + $s[$k]->date = date( DATE_RFC822, $v->udate ); + $s[$k]->guid = $s[$k]->date; + $s[$k]->desc = ''; + } + $f_items = array_merge( $f_items, $s ); +} + +usort( $f_items, 'datesort' ); + +$f_date = $f_items[0]->date; + +$rfc1123_date = gmdate( 'D, d M Y H:i:s ', $f_items[0]->udate ) . 'GMT'; +$etag = md5( $rfc1123_date ); + +/* Conditional Get */ +header( "Last-Modified: $rfc1123_date" ); +header( "ETag: \"$etag\""); + +if( isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] == $rfc1123_date ) { + header('HTTP/1.0 304 Not Modified'); + exit; +} +if( isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag ) { + header('HTTP/1.0 304 Not Modified'); + exit; +} + +header("XX-Powered-By: Nikuman"); +header("Content-Type: application/rss+xml;charset=utf-8"); + +echo '', "\n"; +?> + + + <?php echo $f_title; ?> + http://www.megatokyo.com + + en-us + Fred Gallagher + piro@megatokyo.com + + + 15 + + + + <?php echo $v->title; ?> + link; ?> + desc; ?> + guid; ?> + date; ?> + + + + diff --git a/rss/rss.php b/rss/rss.php new file mode 100644 index 0000000..1d58786 --- /dev/null +++ b/rss/rss.php @@ -0,0 +1,188 @@ + $entity){ + $mapping[$entity] = '&#' . ord($char) . ';'; + } + return str_replace(array_keys($mapping), $mapping, $string); +} + +function Excerpt( $excerpt ) { + $excerpt = strip_tags( $excerpt ); + if (strlen($excerpt) > 455) { + $excerpt = substr($excerpt,0,452) . '...'; + } + return $excerpt; +} + +function datesort( $a , $b ) { + if( $a->udate == $b->udate ) return 0; + return( $a->udate > $b->udate ) ? -1 : 1; +} + +function utfentities($string) +{ + return htmlentities($string, ENT_COMPAT, 'UTF-8'); +} + +function _query( $s, $byid = false ) { + global $link; + $r = mysqli_query($link, $s ) or die( mysqli_error($link) ); + $ret=array(); + $i=0; + + if( $byid ) { + while ($row = mysqli_fetch_object($r) ) + $ret[$row->id] = $row; + } else { + while ($row = mysqli_fetch_object($r) ) + $ret[$i++] = $row; + } + return $ret; +} + +@$f_title = $type = $_GET['type']; + +$f_items = array(); +$f_desc = 'News and Comics from Megatokyo.'; + +/*if( $type == 'status' or $type == '') { + // Status Box Updates + $f_title = 'Megatokyo Status Updates'; + $s = _query( "SELECT MAX(id)+1 as m FROM strip" ); // Permalinks to strips? + + $s = _query( "SELECT DISTINCT SUBTIME( published, eta ) as dd, UNIX_TIMESTAMP(published) as udate, text, UNIX_TIMESTAMP(eta) as eta, percentage + FROM status s + ORDER BY udate DESC + LIMIT 5"); + foreach( $s as $k=>$v ) { + $s[$k]->link = 'http://www.megatokyo.com/'; + $s[$k]->title = "Update: $v->percentage%: " . htmlentities($v->text, ENT_COMPAT, ini_get('default_charset')); + + $d = date( 'l F jS, H:i', $v->eta ); + $dd = (int) (( $v->eta - $v->udate )/3600); + + $s[$k]->desc = "$v->percentage% complete. +
Next comic should be posted at: $d. ($dd hours)]]>"; + $s[$k]->date = date( DATE_RFC822, $v->udate ); + $s[$k]->guid = $s[$k]->link; + } + $f_items = array_merge( $f_items, $s ); +}*/ + +if( $type == 'strips' or $type == '') { + $f_title = 'Megatokyo Comics'; + $s = _query("SELECT DISTINCT s.id, UNIX_TIMESTAMP(s.published) as udate, t.description as chapdesc, t.name as chapname, s.title + FROM media_t media, strip s, strip_t t + WHERE s.media = media.id AND s.published < NOW() + AND s.type = t.id + ORDER BY s.id DESC LIMIT 5") or die(mysqli_error($link)); + foreach($s as $k=>$v) { + $s[$k]->link = SITE_HOST . SITE_PATH . "/strip/$v->id"; + #$s[$k]->title = "Comic [$v->id] \"" . utfentities($v->title, ENT_COMPAT, ini_get('default_charset')) . '"'; + $s[$k]->title = "Comic [$v->id] \"" . numeric_entities(utfentities($v->title)) . '"'; + $s[$k]->desc = "chapdesc comic $v->id +
[read...] +
[link . "\">permalink] + ]]>"; + $s[$k]->date = date( DATE_RSS, $v->udate ); + $s[$k]->guid = $s[$k]->link; + $s[$k]->perm = 'true'; + } + $f_items = array_merge( $f_items, $s ); +} + +if( $type == 'rants' or $type == '' ) { + $f_title = 'Megatokyo Rants'; + $contributers = _query("SELECT * FROM contributor", true); + $s = _query("SELECT r.id, r.body as body, UNIX_TIMESTAMP(r.published) as udate, r.author as authorno, r.title + FROM rant r + WHERE r.published < NOW() + AND r.status = 'published' + ORDER BY udate DESC LIMIT 5"); + foreach($s as $k=>$v) { + $s[$k]->link = SITE_HOST . SITE_PATH . "/rant/$v->id"; + $s[$k]->author = utfentities( $contributers[$v->authorno]->name, ENT_COMPAT, ini_get('default_charset') ); + $s[$k]->title = "Rant [$v->id] \"" . utfentities($v->title, ENT_COMPAT, ini_get('default_charset')) . '"'; + $s[$k]->desc = "body) . "

[link . "\">permalink]

]]>"; + $s[$k]->date = date( DATE_RSS, $v->udate ); + $s[$k]->guid = $s[$k]->link; + $s[$k]->perm = 'true'; + } + $f_items = array_merge( $f_items, $s ); +} + +if( $type == '' ) +{ + $f_title = 'Megatokyo Comics and News'; + $s = _query("SELECT UNIX_TIMESTAMP(published) as udate, body, url FROM rss_comment ORDER BY published DESC LIMIT 5"); + + foreach($s as $k=>$v) + { + $s[$k]->link = $v->url; + $s[$k]->title = $v->body; + $s[$k]->date = date( DATE_RSS, $v->udate ); + $s[$k]->guid = date( DATE_W3C, $s[$k]->udate); + $s[$k]->desc = ''; + $s[$k]->perm = 'false'; + } + $f_items = array_merge( $f_items, $s ); +} + +usort( $f_items, 'datesort' ); + +$f_date = $f_items[0]->date; + +$rfc1123_date = gmdate( 'D, d M Y H:i:s ', $f_items[0]->udate ) . 'GMT'; +$etag = md5( $rfc1123_date ); + +/* Conditional Get */ +header( "Last-Modified: $rfc1123_date" ); +header( "ETag: \"$etag\""); + +if( isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] == $rfc1123_date ) { + header('HTTP/1.0 304 Not Modified'); + exit; +} +if( isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag ) { + header('HTTP/1.0 304 Not Modified'); + exit; +} + +header("XX-Powered-By: Nikuman"); +header("Content-Type: application/rss+xml;charset=utf-8"); + +echo '', "\n"; +?> + + + <?php echo $f_title; ?> + http://www.megatokyo.com + + + en-us + Fred Gallagher + piro@megatokyo.com (Fred Gallagher) + + + 15 + + + + <?php echo $v->title; ?> + link; ?> + desc; ?> + guid; ?> + date; ?> + + + + + diff --git a/rss/xml.gif b/rss/xml.gif new file mode 100644 index 0000000000000000000000000000000000000000..ecb09575418861d80c63d143660290732b84678e GIT binary patch literal 429 zc${-lBS^j_f@V`j(!Sbf>FCRROWBHQ8`u60;56P^* zzP!Ibujv2k;_nYGTqrVrzIWmO#~0^2GXH;e^=XUq|5lU#w+@~QWjUL!{QvF4=bIt1)p3eAnlx4IjZ9zUvd|2TX$mPx{oR&qjsoWl^^zDFf(reW zxDELXdGt8ay5zN))0+%i+M@kb(;4;HjnV{4m{q1Vw?+jf8M4Xvrm-rdORSi&Dxlqu zg_*fWYNH{ma*5vdnXCOZd->Bv79D2d&|}!nCatZl<-gk~c0RktI@wK3e%l)i)wulb r8L?mWWzy3#`tscGs}a}Ne?N`xrAm6Z9_nu95Y~!0QSh)+fx#L8%kitR literal 0 Hc$@