User:Barrylb/RSS Feed Integrator/source

<?php ////////////////////////////////////////////////////// // // RSS Feed Integrator // by Barry Brannan August 2007 // http://www.mediawiki.org/wiki/User:Barrylb/RSS Feed Integrator // // You also need MagpieRSS from: // http://magpierss.sourceforge.net/ // ///////////////////////////////////////////////////////

function decode_header ( $str ) {   $part = preg_split ( "/\r?\n/", $str, -1, PREG_SPLIT_NO_EMPTY ); $out = array ; for ( $h = 0; $h < sizeof ( $part ); $h++ ) { if ( $h != 0 ) { $pos = strpos ( $part[$h], ':' ); $k = strtolower ( str_replace ( ' ', '', substr ( $part[$h], 0, $pos ) ) ); $v = trim ( substr ( $part[$h], ( $pos + 1 ) ) ); }       else { $k = 'status'; $v = explode ( ' ', $part[$h] ); $v = $v[1]; }

if ( $k == 'set-cookie' ) { $out['cookies'][] = $v; }       else if ( $k == 'content-type' )  { if ( ( $cs = strpos ( $v, ';' ) ) !== false ) { $out[$k] = substr ( $v, 0, $cs ); }           else { $out[$k] = $v; }       }        else { $out[$k] = $v; }   }

return $out; }

function decode_body ( $info, $str, $eol = "\r\n" ) { $tmp = $str; $add = strlen ( $eol ); $str = ''; if ( isset ( $info['transfer-encoding'] ) && $info['transfer-encoding'] == 'chunked' ) { do { $tmp = ltrim ( $tmp ); $pos = strpos ( $tmp, $eol ); $len = hexdec ( substr ( $tmp, 0, $pos ) ); if ( isset ( $info['content-encoding'] ) ) { $str .= gzinflate ( substr ( $tmp, ( $pos + $add + 10 ), $len ) ); }     else { $str .= substr ( $tmp, ( $pos + $add ), $len ); }     $tmp = substr ( $tmp, ( $len + $pos + $add ) ); $check = trim ( $tmp ); }   while ( ! empty ( $check ) ); } else if ( isset ( $info['content-encoding'] ) ) { $str = gzinflate ( substr ( $tmp, 10 ) ); } else { $str = $tmp; } return $str; }

function HttpGet($host, $port, $send, &$info, &$result) {

if ( ( $io = fsockopen( $host, $port, $errno, $errstr, 5 ) ) !== false ) {     fputs ( $io, $send ); $send = '';

do { $send .= fgets ( $io, 4096 ); } while ( strpos ( $send, "\r\n\r\n" ) === false );

$info = decode_header ( $send ); $send = '';

while ( ! feof ( $io ) ) { $send .= fread ( $io, 8192 ); }     fclose ( $io ); $result = decode_body ( $info, $send ); return true; } else return false; }

function DoLogin($host, $port, $username, $password, $cookie) {

$postcontent = "wpName=". $username. "&wpPassword=". $password. "&wpLoginattempt=Log+in"; $send = "POST /mediawiki/index.php?title=Special:Userlogin&action=submitlogin&type=login HTTP/1.1\r\n"; $send .= "Host: ". $host. ":" . $port. "\r\n"; $send .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n"; $send .= "Accept: text/xml,application/xml,application/xhtml+xml,"; $send .= "text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,"; $send .= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $send .= "Accept-Language: en-us, en;q=0.50\r\n"; $send .= "Accept-Encoding: gzip, deflate, compress;q=0.9\r\n"; $send .= "Content-Type: application/x-www-form-urlencoded\r\n"; $send .= "Content-Length: ". strlen($postcontent). "\r\n"; $send .= 'Cookie: '. $cookie. "\r\n"; $send .= "Connection: Close\r\n\r\n"; $send .= $postcontent; if (HttpGet($host, $port, $send, $info, $result)) { if (strpos($result, 'You are now logged in') !== false) return true; else return false; } else return false; }

function GetLoginPage($host, $port) { $send = "GET /mediawiki/index.php?title=Special:Userlogin HTTP/1.1\r\n"; $send .= "Host: ". $host. ":" . $port. "\r\n"; $send .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n"; $send .= "Accept: text/xml,application/xml,application/xhtml+xml,"; $send .= "text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,"; $send .= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $send .= "Accept-Language: en-us, en;q=0.50\r\n"; $send .= "Accept-Encoding: gzip, deflate, compress;q=0.9\r\n"; $send .= "Connection: Close\r\n\r\n";

HttpGet($host, $port, $send, $info, $result); return $info['cookies']; }

function DoEditPage($host, $port, $title, $pagecontent, $cookie) {

$send = "GET /mediawiki/index.php?title=". $title. "&action=edit HTTP/1.1\r\n"; $send .= "Host: ". $host. ":" . $port. "\r\n"; $send .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n"; $send .= "Accept: text/xml,application/xml,application/xhtml+xml,"; $send .= "text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,"; $send .= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $send .= "Accept-Language: en-us, en;q=0.50\r\n"; $send .= "Accept-Encoding: gzip, deflate, compress;q=0.9\r\n"; $send .= 'Cookie: '. $cookie. "\r\n"; $send .= "Connection: Close\r\n\r\n";

HttpGet($host, $port, $send, $info, $result); $wpSection = ""; preg_match('/]*value="(.*)" name="wpStarttime"/', $result, $matches); $wpStarttime = $matches[1];

preg_match('/]*value="(.*)" name="wpEdittime"/', $result, $matches); $wpEdittime = $matches[1]; $wpScrolltop = "0"; preg_match('/]*>(.*)<\/textarea/s', $result, $matches); $wpTextbox1 = htmlspecialchars_decode($matches[1]); if ($wpTextbox1 != $pagecontent) $wpTextbox1 = $pagecontent;

$wpSummary = ""; $wpSave = "Save page";

preg_match('/]*value="(.*)" name="wpEditToken"/', $result, $matches); $wpEditToken = $matches[1]; preg_match('/]*value="(.*)"/', $result, $matches); $wpAutoSummary = $matches[1]; $boundary = "---". md5(uniqid(microtime)); $postcontent = '--' . $boundary. "\r\n". 'Content-Disposition: form-data; name="wpSection"'. "\r\n\r\n". $wpSection. "\r\n". '--' . $boundary. "\r\n". 'Content-Disposition: form-data; name="wpStarttime"'. "\r\n\r\n". $wpStarttime. "\r\n". '--' . $boundary. "\r\n". 'Content-Disposition: form-data; name="wpEdittime"'. "\r\n\r\n". $wpEdittime. "\r\n". '--' . $boundary. "\r\n". 'Content-Disposition: form-data; name="wpScrolltop"'. "\r\n\r\n". $wpScrolltop. "\r\n". '--' . $boundary. "\r\n". 'Content-Disposition: form-data; name="wpTextbox1"'. "\r\n\r\n". $wpTextbox1. "\r\n". '--' . $boundary. "\r\n". 'Content-Disposition: form-data; name="wpSummary"'. "\r\n\r\n". $wpSummary. "\r\n". '--' . $boundary. "\r\n". 'Content-Disposition: form-data; name="wpSave"'. "\r\n\r\n". $wpSave. "\r\n". '--' . $boundary. "\r\n". 'Content-Disposition: form-data; name="wpEditToken"'. "\r\n\r\n". $wpEditToken. "\r\n". '--' . $boundary. "\r\n". 'Content-Disposition: form-data; name="wpAutoSummary"'. "\r\n\r\n". $wpAutoSummary. "\r\n". '--' . $boundary. '--' . "\r\n"; $send = "POST /mediawiki/index.php?title=". $title. "&action=submit HTTP/1.1\r\n"; $send .= "Host: ". $host. ":" . $port. "\r\n"; $send .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n"; $send .= "Accept: text/xml,application/xml,application/xhtml+xml,"; $send .= "text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,"; $send .= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $send .= "Accept-Language: en-us, en;q=0.50\r\n"; $send .= "Accept-Encoding: gzip, deflate, compress;q=0.9\r\n"; $send .= "Content-Type: multipart/form-data; boundary=". $boundary. "\r\n"; $send .= "Content-Length: ". strlen($postcontent). "\r\n"; $send .= 'Cookie: '. $cookie. "\r\n"; $send .= "Connection: Close\r\n\r\n"; $send .= $postcontent;

HttpGet($host, $port, $send, $info, $result);

if (($info['status'] == '302') && ($result == '')) return true; else return false;

}

////////// Settings ////////// $wikihost = '127.0.0.1'; $wikiport = 81; $wikiusername = 'user'; $wikipassword = 'pass'; $feed_article_name = 'Slashdot_RSS'; $rss_url = 'http://rss.slashdot.org/Slashdot/slashdot'; ////////////////////////////

echo ' Getting RSS feed... '; require_once('magpierss/rss_fetch.inc'); define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $rss = fetch_rss($rss_url);

$newpage = "\r\n". "== " . $rss->channel['title']. "==\r\n"; foreach ($rss->items as $item) { $newpage .= "* [". $item['link']. " " . $item['title']. "]\r\n"; }

echo ' Getting wiki login page.. '; $cookies = GetLoginPage($wikihost,$wikiport); $cookie = $cookies[0]; $cookie = substr($cookie,0, strpos($cookie,';')); echo ' Posting login credentials.. '; if (DoLogin($wikihost,$wikiport,$wikiusername,$wikipassword,$cookie)) { echo ' Editing page.. '; if (DoEditPage($wikihost,$wikiport,$feed_article_name,$newpage,$cookie)) echo ' Ok '; else echo ' Error '; } else echo ' Failed to login ';

?>