]>
git.wh0rd.org - tt-rss.git/blob - plugins/af_unburn/init.php
2 class Af_Unburn
extends Plugin
{
9 "Resolves feedburner and similar feed redirector URLs (requires CURL)" ,
13 function init ( $host ) {
14 $this -> link
= $host -> get_link ();
17 $host -> add_hook ( $host :: HOOK_ARTICLE_FILTER
, $this );
20 function hook_article_filter ( $article ) {
21 $owner_uid = $article [ "owner_uid" ];
23 if (! function_exists ( "curl_init" ))
26 if (( strpos ( $article [ "link" ], "feedproxy.google.com" ) !== FALSE ||
27 strpos ( $article [ "link" ], "/~r/" ) !== FALSE ||
28 strpos ( $article [ "link" ], "feedsportal.com" ) !== FALSE )) {
30 if ( strpos ( $article [ "plugin_data" ], "unburn, $owner_uid :" ) === FALSE ) {
32 if ( ini_get ( "safe_mode" ) ||
ini_get ( "open_basedir" )) {
33 $ch = curl_init ( geturl ( $article [ "link" ]));
35 $ch = curl_init ( $article [ "link" ]);
38 curl_setopt ( $ch , CURLOPT_TIMEOUT
, 5 );
39 curl_setopt ( $ch , CURLOPT_RETURNTRANSFER
, true );
40 curl_setopt ( $ch , CURLOPT_HEADER
, true );
41 curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION
, ! ini_get ( "safe_mode" ) && ! ini_get ( "open_basedir" ));
42 curl_setopt ( $ch , CURLOPT_USERAGENT
, SELF_USER_AGENT
);
44 $contents = @curl_exec
( $ch );
46 $real_url = curl_getinfo ( $ch , CURLINFO_EFFECTIVE_URL
);
51 /* remove the rest of it */
53 $query = parse_url ( $real_url , PHP_URL_QUERY
);
55 if ( $query && strpos ( $query , "utm_source" ) !== FALSE ) {
57 parse_str ( $query , $args );
59 foreach ( array ( "utm_source" , "utm_medium" , "utm_campaign" ) as $param ) {
60 if ( isset ( $args [ $param ])) unset ( $args [ $param ]);
63 $new_query = http_build_query ( $args );
65 if ( $new_query != $query ) {
66 $real_url = str_replace ( "? $query " , "? $new_query " , $real_url );
70 $real_url = preg_replace ( "/ \? $/" , "" , $real_url );
72 $article [ "plugin_data" ] = "unburn, $owner_uid :" . $article [ "plugin_data" ];
73 $article [ "link" ] = $real_url ;
75 } else if ( isset ( $article [ "stored" ][ "link" ])) {
76 $article [ "link" ] = $article [ "stored" ][ "link" ];
83 function geturl ( $url ){
85 ( 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' );
88 $header [ 0 ] = "Accept: text/xml,application/xml,application/xhtml+xml," ;
89 $header [ 0 ] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" ;
90 $header [] = "Cache-Control: max-age=0" ;
91 $header [] = "Connection: keep-alive" ;
92 $header [] = "Keep-Alive: 300" ;
93 $header [] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" ;
94 $header [] = "Accept-Language: en-us,en;q=0.5" ;
95 $header [] = "Pragma: " ;
97 curl_setopt ( $curl , CURLOPT_URL
, $url );
98 curl_setopt ( $curl , CURLOPT_USERAGENT
, 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Firefox/5.0' );
99 curl_setopt ( $curl , CURLOPT_HTTPHEADER
, $header );
100 curl_setopt ( $curl , CURLOPT_HEADER
, true );
101 curl_setopt ( $curl , CURLOPT_REFERER
, $url );
102 curl_setopt ( $curl , CURLOPT_ENCODING
, 'gzip,deflate' );
103 curl_setopt ( $curl , CURLOPT_AUTOREFERER
, true );
104 curl_setopt ( $curl , CURLOPT_RETURNTRANSFER
, true );
105 //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //CURLOPT_FOLLOWLOCATION Disabled...
106 curl_setopt ( $curl , CURLOPT_TIMEOUT
, 60 );
108 $html = curl_exec ( $curl );
110 $status = curl_getinfo ( $curl );
113 if ( $status [ 'http_code' ]!= 200 ){
114 if ( $status [ 'http_code' ] == 301 ||
$status [ 'http_code' ] == 302 ) {
115 list ( $header ) = explode ( " \r\n\r\n " , $html , 2 );
117 preg_match ( "/(Location:|URI:)[^( \n )]*/" , $header , $matches );
118 $url = trim ( str_replace ( $matches [ 1 ], "" , $matches [ 0 ]));
119 $url_parsed = parse_url ( $url );
120 return ( isset ( $url_parsed )) ?
geturl ( $url , $referer ): '' ;
123 foreach ( $status as $key => $eline ){ $oline .= '[' . $key . ']' . $eline . ' ' ;}
124 $line = $oline . " \r\n " . $url . " \r\n ----------------- \r\n " ;
125 $handle = @fopen
( './curl.error.log' , 'a' );
126 fwrite ( $handle , $line );