2013-01-12 19:47:10 +01:00
< ? php
class Af_Unburn extends Plugin {
private $link ;
private $host ;
function about () {
return array ( 1.0 ,
2013-01-21 19:40:38 +01:00
" Resolves feedburner and similar feed redirector URLs (requires CURL) " ,
2013-01-12 19:47:10 +01:00
" fox " );
}
function init ( $host ) {
$this -> link = $host -> get_link ();
$this -> host = $host ;
$host -> add_hook ( $host :: HOOK_ARTICLE_FILTER , $this );
}
function hook_article_filter ( $article ) {
$owner_uid = $article [ " owner_uid " ];
if ( ! function_exists ( " curl_init " ))
return $article ;
2013-01-14 08:11:03 +01:00
if (( strpos ( $article [ " link " ], " feedproxy.google.com " ) !== FALSE ||
2013-01-20 17:22:04 +01:00
strpos ( $article [ " link " ], " /~r/ " ) !== FALSE ||
2013-02-23 09:07:46 +01:00
strpos ( $article [ " link " ], " feedsportal.com " ) !== FALSE )) {
2013-01-12 19:47:10 +01:00
2013-02-23 09:07:46 +01:00
if ( strpos ( $article [ " plugin_data " ], " unburn, $owner_uid : " ) === FALSE ) {
2013-01-12 19:47:10 +01:00
2013-03-20 09:15:06 +01:00
if ( ini_get ( " safe_mode " )) {
$ch = curl_init ( geturl ( $article [ " link " ]));
} else {
$ch = curl_init ( $article [ " link " ]);
}
2013-02-23 09:07:46 +01:00
curl_setopt ( $ch , CURLOPT_TIMEOUT , 5 );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_HEADER , true );
2013-03-20 09:15:06 +01:00
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , ! ini_get ( " safe_mode " ));
2013-02-23 09:07:46 +01:00
curl_setopt ( $ch , CURLOPT_USERAGENT , SELF_USER_AGENT );
2013-01-12 19:47:10 +01:00
2013-02-23 09:07:46 +01:00
$contents = @ curl_exec ( $ch );
2013-01-12 19:47:10 +01:00
2013-02-23 09:07:46 +01:00
$real_url = curl_getinfo ( $ch , CURLINFO_EFFECTIVE_URL );
2013-01-13 07:56:54 +01:00
2013-02-23 09:07:46 +01:00
curl_close ( $ch );
2013-01-13 07:56:54 +01:00
2013-02-23 09:07:46 +01:00
if ( $real_url ) {
/* remove the rest of it */
2013-01-13 07:56:54 +01:00
2013-02-23 09:07:46 +01:00
$query = parse_url ( $real_url , PHP_URL_QUERY );
2013-01-13 07:56:54 +01:00
2013-02-23 09:07:46 +01:00
if ( $query && strpos ( $query , " utm_source " ) !== FALSE ) {
$args = array ();
parse_str ( $query , $args );
foreach ( array ( " utm_source " , " utm_medium " , " utm_campaign " ) as $param ) {
if ( isset ( $args [ $param ])) unset ( $args [ $param ]);
}
2013-01-13 07:56:54 +01:00
2013-02-23 09:07:46 +01:00
$new_query = http_build_query ( $args );
2013-01-13 07:56:54 +01:00
2013-02-23 09:07:46 +01:00
if ( $new_query != $query ) {
$real_url = str_replace ( " ? $query " , " ? $new_query " , $real_url );
}
2013-01-13 07:56:54 +01:00
}
2013-02-23 09:07:46 +01:00
$real_url = preg_replace ( " / \ ? $ / " , " " , $real_url );
2013-01-31 21:34:57 +01:00
2013-02-23 09:07:46 +01:00
$article [ " plugin_data " ] = " unburn, $owner_uid : " . $article [ " plugin_data " ];
$article [ " link " ] = $real_url ;
}
} else if ( isset ( $article [ " stored " ][ " link " ])) {
$article [ " link " ] = $article [ " stored " ][ " link " ];
2013-01-12 19:47:10 +01:00
}
}
return $article ;
}
2013-03-20 09:15:06 +01:00
2013-03-18 22:10:02 +01:00
function geturl ( $url ){
( function_exists ( 'curl_init' )) ? '' : die ( 'cURL Must be installed for geturl function to work. Ask your host to enable it or uncomment extension=php_curl.dll in php.ini' );
$curl = curl_init ();
$header [ 0 ] = " Accept: text/xml,application/xml,application/xhtml+xml, " ;
$header [ 0 ] .= " text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 " ;
$header [] = " Cache-Control: max-age=0 " ;
$header [] = " Connection: keep-alive " ;
$header [] = " Keep-Alive: 300 " ;
$header [] = " Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 " ;
$header [] = " Accept-Language: en-us,en;q=0.5 " ;
$header [] = " Pragma: " ;
curl_setopt ( $curl , CURLOPT_URL , $url );
curl_setopt ( $curl , CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Firefox/5.0' );
curl_setopt ( $curl , CURLOPT_HTTPHEADER , $header );
curl_setopt ( $curl , CURLOPT_HEADER , true );
curl_setopt ( $curl , CURLOPT_REFERER , $url );
curl_setopt ( $curl , CURLOPT_ENCODING , 'gzip,deflate' );
curl_setopt ( $curl , CURLOPT_AUTOREFERER , true );
curl_setopt ( $curl , CURLOPT_RETURNTRANSFER , true );
//curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //CURLOPT_FOLLOWLOCATION Disabled...
curl_setopt ( $curl , CURLOPT_TIMEOUT , 60 );
$html = curl_exec ( $curl );
$status = curl_getinfo ( $curl );
curl_close ( $curl );
if ( $status [ 'http_code' ] != 200 ){
if ( $status [ 'http_code' ] == 301 || $status [ 'http_code' ] == 302 ) {
list ( $header ) = explode ( " \r \n \r \n " , $html , 2 );
$matches = array ();
preg_match ( " /(Location:|URI:)[^( \n )]*/ " , $header , $matches );
$url = trim ( str_replace ( $matches [ 1 ], " " , $matches [ 0 ]));
$url_parsed = parse_url ( $url );
return ( isset ( $url_parsed )) ? geturl ( $url , $referer ) : '' ;
}
$oline = '' ;
foreach ( $status as $key => $eline ){ $oline .= '[' . $key . ']' . $eline . ' ' ;}
$line = $oline . " \r \n " . $url . " \r \n ----------------- \r \n " ;
$handle = @ fopen ( './curl.error.log' , 'a' );
fwrite ( $handle , $line );
return FALSE ;
}
return $url ;
}
2013-01-12 19:47:10 +01:00
}
?>