Current File : /home/honehdyv/remonster.online/wp-content/plugins/wp-automatic/core.ezinearticles.php |
<?php
// Main class to inherit wp_automatic
require_once 'core.php';
// Specific articles class
Class WpAutomaticArticles extends wp_automatic{
/*
* ---* article base get links for a keyword ---
*/
function article_base_getlinks($keyword, $camp) {
$camp_opt = unserialize ( $camp->camp_options );
if (stristr ( $camp->camp_general, 'a:' ))
$camp->camp_general = base64_encode ( $camp->camp_general );
$camp_general = unserialize ( base64_decode ( $camp->camp_general ) );
// get associated page num from the keyword and camp id from wp_automatic_articles_keys
$query = "select * from {$this->wp_prefix}automatic_articles_keys where keyword = '$keyword' and camp_id = '$camp->camp_id'";
$camp_key = $this->db->get_results ( $query );
if (count ( $camp_key ) == 0){
echo '<br>Keyword record not found';
return false;
}
$camp_key = $camp_key [0];
$foundUrls = array();
$page = $camp_key->page_num;
if ( $page == - 1) {
//check if it is reactivated or still deactivated
if($this->is_deactivated($camp->camp_id, $keyword)){
$page = '0000';
}else{
//still deactivated
return false;
}
}
//Make sure start is 0,1,2 for bing
if( ! stristr($page, '1994') ){
$page = 0;
}else{
$page = str_replace('1994', '', $page);
}
if($page >9 ) $page = 9;
$startIndex = 1 + 10 * $page;
echo '<br>Trying to call EA for new links start from page:' . $page;
//$keywordenc = urlencode ( 'site:ezinearticles.com '. trim($keyword). ' inurl:"id"' );
//$keywordenc = urlencode ( trim($keyword). ' inurl:"id"' );
$keywordenc = urlencode ( trim($keyword) );
echo '<br>Using Google custom search to find new articles...';
//verify Google custom search key existence
$wp_automatic_search_key = get_option('wp_automatic_search_key','');
if(trim($wp_automatic_search_key) == ''){
echo '<br><span style="color:red" >Google custom search API key is required. Please visit the plugin settings page and add it inside EzineArticles settings box</span>';
return false;
}
//Good we have some keys, verify usage limits
//Now get one key out of many if applicable
$wp_rankie_googlecustom_keys = explode(',', $wp_automatic_search_key);
$wp_rankie_googlecustom_keys = array_filter($wp_rankie_googlecustom_keys);
$now = time();
$validWorkingKey = '';
foreach ($wp_rankie_googlecustom_keys as $current_key){
if(trim($current_key) != ''){
//check if key is disabled or not
$current_keyMd5 = md5($current_key);
$disabledTill = get_option('wp_automatic_'.$current_keyMd5,'1463843434');
if($disabledTill > $now){
continue;
}else{
$validWorkingKey = $current_key;
break;
}
}
}
if(trim($validWorkingKey) == ''){
echo '<br><span style="color:red" >Custom search API keys reached its daily search requests limit, we will try again after one hour. each key gives us 100 daily search request.</b>';
return false;
}else{
echo '<br>Using an added key:'.substr($validWorkingKey, 0,5).'.....';
}
$wp_rankie_googlecustom_id = '013156076200156289477:aavh3lmtysa';
$wp_rankie_googlecustom_id = '013156076200156289477:e_o1j3uv0rs';
$wp_rankie_ezmlm_gl = 'google.com';
$url ="https://www.googleapis.com/customsearch/v1?key=" . urlencode( trim($validWorkingKey) ) . "&cx=" . urlencode( trim($wp_rankie_googlecustom_id) ) . "&q=".$keywordenc.'&googlehost='.urlencode($wp_rankie_ezmlm_gl).'&start='.$startIndex;
//date limit
if(in_array('OPT_ARTICLES_DATE' , $camp_opt )){
$cg_articles_date_last_val = $camp_general['cg_articles_date_last_val'];
$cg_articles_date_last = $camp_general['cg_articles_date_last'];
if(is_numeric($cg_articles_date_last_val)){
if($cg_articles_date_last == 'Months'){
$url.= "&dateRestrict=m{$cg_articles_date_last_val}";
}else{
//years
$url.= "&dateRestrict=y{$cg_articles_date_last_val}";
}
}
}
//echo '<br>Search URL:'.$url;
//curl get
$x='error';
curl_setopt($this->ch, CURLOPT_HTTPGET, 1);
curl_setopt($this->ch, CURLOPT_URL, trim($url));
$exec=curl_exec($this->ch);
$x=curl_error($this->ch);
//validate a reply
if(trim($exec) == ''){
echo '<br>Empty reply from Google search API with possible cURL error '.$x;
return false;
}
//validate json
if( ! stristr($exec , '{') ){
echo '<br>Not a json reply '.$exec;
return false;
}
// good let's get results
$jsonReply = json_decode($exec);
if(isset($jsonReply->error)){
$jsonErr = $jsonReply->error->errors[0];
$errReason = $jsonErr->reason;
$errMessage = $jsonErr->message;
$message = 'Api returned an error: '.$errReason.' '.$errMessage;
echo '<br>'.$message;
// disable limited keys
if($errReason == 'dailyLimitExceeded'){
update_option('wp_automatic_'.$current_keyMd5,$now + 60*60);
}
$return['message'] = $message;
return $return;
}
if(isset($jsonReply->items)){
$foundLinks = $jsonReply->items;
}else{
$foundLinks = array();
}
foreach ($foundLinks as $foundLink){
$finalUrl= $foundLink->link;
$foundUrls[] = $finalUrl;
}
// No links? return if yes
if(count($foundUrls) == 0 ){
echo '<br> no matching results found for this keyword';
$query = "update {$this->wp_prefix}automatic_articles_keys set page_num = '-1' where keyword = '$keyword' and camp_id = '$camp->camp_id'";
$this->db->query ( $query );
//deactivate permanently
$this->deactivate_key($camp->camp_id, $keyword,0);
return false;
}else{
// good lets update next page
$page++;
if($page > 9){
$query = "update {$this->wp_prefix}automatic_articles_keys set page_num = '-1' where keyword = '$keyword' and camp_id = '$camp->camp_id'";
$this->db->query ( $query );
//deactivate for 60 minutes
$this->deactivate_key($camp->camp_id, $keyword ,0);
}else{
$page= "1994$page";
$query = "update {$this->wp_prefix}automatic_articles_keys set page_num = $page where keyword = '$keyword' and camp_id = '$camp->camp_id' ";
$this->db->query ( $query );
}
}
// Report links count
echo '<br>Articles links got from EA:' . count ( $foundUrls );
$this->log ( 'links found', count ( $foundUrls ) . ' New Links added from ezine articles to post articles from' );
echo '<ol>';
$i = 0;
foreach ( $foundUrls as $link ) {
$link = urldecode($link);
// verify id in link
echo '<li>Link:'.($link);
$link_url = $link;
if (stristr ( $link, 'id=' )) {
// verify uniqueness
if( $this->is_execluded($camp->camp_id, $link_url) ){
echo '<-- Execluded';
continue;
}
if ( ! $this->is_duplicate($link_url) ) {
$title = '';
$cache = '';
// cache link
$urlEncoded = urlencode($link_url);
$bingcache= '';
$query = "insert into {$this->wp_prefix}automatic_articles_links (link,keyword,page_num,title,bing_cache) values('$link' ,'$keyword','$page','$title','$bingcache')";
$this->db->query ( $query );
$freshlinks = 1;
} else {
echo ' <- duplicated <a href="'.get_edit_post_link($this->duplicate_id).'">#'.$this->duplicate_id.'</a>';
}
echo '</li>';
// incrementing i
} // if contain id
$i ++;
} // foreach link
echo '</ol>';
// updating page num
$page = $page + 1;
$pageDisplayed = $page + 1;
return;
}
/*
* ---* articlebase process camp ---
*/
function articlebase_get_post($camp) {
$keywords = $camp->camp_keywords;
$keywords = explode ( ",", $keywords );
foreach ( $keywords as $keyword ) {
$keyword = trim($keyword);
if (trim ( $keyword ) != '') {
//update last keyword
update_post_meta($camp->camp_id, 'last_keyword', trim($keyword));
// check if keyword exhausted to skip
$query = "select * from {$this->wp_prefix}automatic_articles_keys where keyword = '$keyword' and camp_id='$camp->camp_id'";
$key = $this->db->get_results ( $query );
$key = $key [0];
// process feed
echo '<br><b>Getting article for Keyword:</b>' . $keyword;
// get links to fetch and post on the blogs
$query = "select * from {$this->wp_prefix}automatic_articles_links where keyword = '$keyword' ";
$links = $this->db->get_results ( $query );
// when no links available get some links
if (count ( $links ) == 0) {
//clean any old cache for this keyword
$query_delete = "delete from {$this->wp_prefix}automatic_articles_links where keyword = '$keyword' ";
$this->db->query ( $query_delete );
$this->article_base_getlinks ( $keyword, $camp );
// get links to fetch and post on the blogs
$links = $this->db->get_results ( $query );
}
// if no links then return
if (count ( $links ) != 0) {
foreach ( $links as $link ) {
// update the link status to 1
$query = "delete from {$this->wp_prefix}automatic_articles_links where id={$link->id}";
$this->db->query ( $query );
// processing page and getting content
$url = ($link->link) ;
$title = $link->title;
$cacheTxt = $link->bing_cache;
echo '<br>Processing Article :' . urldecode($url);
//duplicaate check
if($this->is_duplicate($url)){
echo ' <- duplicated <a href="'.get_edit_post_link($this->duplicate_id).'">#'.$this->duplicate_id.'</a>';
continue;
}
$binglink = "http://webcache.googleusercontent.com/search?q=cache:".urlencode($url);
echo '<br>Cache link:'.$binglink;
$headers = array();
curl_setopt($this->ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 );
curl_setopt ( $this->ch, CURLOPT_URL, trim ( ( $binglink ) ) );
curl_setopt ( $this->ch, CURLOPT_REFERER, 'http://ezinearticles.com' );
$exec = curl_exec ( $this->ch );
$x = curl_error($this->ch);
// bing cache if google cache failed
if( ! stristr($exec,'comments') && stristr($cacheTxt, '|')){
echo '<br>Google cache did not return the correct content, trying Bing cache instead...';
$cacheParts = explode('|', $cacheTxt);
$cacheLink = "http://cc.bingj.com/cache.aspx?q=123458&d=".$cacheParts[2]."&mkt=en-XA&setlang=en-US&w=".$cacheParts[3];
echo '<br>Cache link:'.$cacheLink;
curl_setopt ( $this->ch, CURLOPT_URL, trim ( ( $cacheLink ) ) );
curl_setopt ( $this->ch, CURLOPT_REFERER, 'http:/bing.com' );
$exec = curl_exec ( $this->ch );
$x = curl_error($this->ch);
}
$cacheLoadSuccess = false; // success flag
if(stristr($exec,'comments')){
//valid google cache
echo '<br>Successfully loaded the page from cache';
$cacheLoadSuccess = true;
}else{
// Google translate
echo '<br>Google cache failed Loading using GtranslateProxy...';
require_once 'inc/proxy.GoogleTranslate.php';
try {
$GoogleTranslateProxy = new GoogleTranslateProxy($this->ch);
$exec = $GoogleTranslateProxy->fetch($url);
} catch (Exception $e) {
echo '<br>ProxyViaGoogleException:'.$e->getMessage();
}
// Validate Google Translate Proxy
if(stristr($exec,'comments')){
//valid google cache
echo '<br>Successfully loaded the page from GTranslateProxy';
$cacheLoadSuccess = true;
// pre Gtranslate adaption
$exec = str_replace( 'article-content>','article-content">',$exec);
$exec = str_replace('<div id=article-resource', '<div id="article-resource', $exec);
$exec = str_replace('rel=author', 'rel="author', $exec);
}
if(!$cacheLoadSuccess){
// Direct call
echo '<br>Google cache didnot return valid result direct call to ezine '.$x;
curl_setopt ( $this->ch, CURLOPT_URL, trim ( ( urldecode( $url ) ) ) );
curl_setopt ( $this->ch, CURLOPT_REFERER, 'http://ezinearticles.com' );
$exec = curl_exec ( $this->ch );
if(stristr($exec, 'comments')){
echo '<br>Ezinearticles returned the article successfully ';
}else{
if(stristr($exec,'excessive amount')){
echo '<br>Ezinearticles says there is excessive amount of traffic';
return false ;
}else{
echo '<br>Ezinearticles did not return the article we called... Will die now and try with a new article another time. ';
return false ;
}
}
}
}
// extracting articles
$arr = explode ( 'article-content">', $exec );
$lastpart = $arr [1];
unset ( $arr );
$newarr = explode ( '<div id="article-resource', $lastpart );
$cont = $newarr [0];
//remove last closing </div>
$cont = preg_replace('{</div>$}s', '', trim($cont));
//striping js
$cont = preg_replace('{<script.*?script>}s', '', $cont);
$cont = preg_replace('{<div class=["]?mobile-ad-container["]?>.*?</div>}s', '', $cont);
// get the title <title>Make Money With Google Profit Kits Exposed - Don't Get Ripped Off!</title>
@preg_match_all ( "{<title>(.*?)</title>}", $exec, $matches, PREG_PATTERN_ORDER );
@$res = $matches [1];
@$ttl = $res [0];
if (isset ( $ttl )) {
$title = $ttl;
}
// get author name and author link <a href="/?expert=Naina_Jain" rel="author" class="author-name" title="EzineArticles Expert Author Naina Jain"> Naina Jain </a>
@preg_match_all ( '{<a href=(.*?) rel="author.*?>(.*?)</a>}', $exec, $matches, PREG_PATTERN_ORDER );
$author_link = $matches [1] [0];
// remove "
$author_link = str_replace('"', '', $author_link);
// fix from translation url
if (stristr($author_link, 'translate')){
$authorParts = explode('u=', $author_link);
$author_link = $authorParts[1] ;
$author_link = preg_replace('{&.*}', '', $author_link );
}
// fix relative linking
if( ! stristr( $author_link , 'ezinearticles' )){
$author_link = 'http://ezinearticles.com' . $author_link;
}
$author_name = trim ( $matches [2] [0] );
$ret ['cont'] = $cont;
$ret ['title'] = $title;
$ret ['original_title'] = $title;
$ret ['source_link'] = ($url);
$ret ['author_name'] = $author_name;
$ret ['author_link'] = $author_link;
$ret ['matched_content'] = $cont;
$this->used_keyword=$link->keyword;
if( trim($ret['cont']) == '' ) echo ' exec:'.$exec;
return $ret;
} // foreach link
} // if count(links)
} // if keyword not ''
} // foreach keyword
}
}