2016-10-25 47 views
0

我創建了以下函數來訪問twitter api並檢索最新的推文。它工作得很好,我可以在我的網站的頁腳顯示最新的推文,而不是發生在每一頁上的負載,我想設置一個cron作業,每小時獲取最新的推文。將wp函數掛接到cron中

我之前沒有使用過wp cron,所以想知道如果有人能告訴我如何做到最好?

function buildBaseString($baseURI, $method, $params) { 
    $r = array(); 
    ksort($params); 
    foreach($params as $key=>$value){ 
    $r[] = "$key=" . rawurlencode($value); 
    } 
    return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r)); 
} 

function buildAuthorizationHeader($oauth) { 
    $r = 'Authorization: OAuth '; 
    $values = array(); 
    foreach($oauth as $key=>$value) 
    $values[] = "$key=\"" . rawurlencode($value) . "\""; 
    $r .= implode(', ', $values); 
    return $r; 
} 

function hs_tweets_fetch($screen_name = 'XXXXXXXXXXX', $count = 1) { 

    $config = array(
     'oauth_access_token' => 'XXXXXXXXXXXXXX', 
     'oauth_access_token_secret' => 'XXXXXXXXXXXXXXX', 
     'consumer_key' => 'XXXXXXXXXXXXXXXXXXXXXX', 
     'consumer_secret' => 'XXXXXXXXXXXXXXXX', 
     'base_url' => 'https://api.twitter.com/1.1/' 
    ); 

    $url = 'statuses/user_timeline.json?screen_name=' . $screen_name . '&count=' . $count; 

    $url_parts = parse_url($url); 
    parse_str($url_parts['query'], $url_arguments); 
    $full_url = $config['base_url'].$url; // Url with the query on it. 
    $base_url = $config['base_url'].$url_parts['path']; // Url without the query. 

    $oauth = array(
     'oauth_consumer_key' => $config['consumer_key'], 
     'oauth_nonce' => time(), 
     'oauth_signature_method' => 'HMAC-SHA1', 
     'oauth_token' => $config['oauth_access_token'], 
     'oauth_timestamp' => time(), 
     'oauth_version' => '1.0' 
    ); 

    $base_info = buildBaseString($base_url, 'GET', array_merge($oauth, $url_arguments)); 
    $composite_key = rawurlencode($config['consumer_secret']) . '&' . rawurlencode($config['oauth_access_token_secret']); 
    $oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); 
    $oauth['oauth_signature'] = $oauth_signature; 

    $header = array(
     buildAuthorizationHeader($oauth), 
     'Expect:' 
    ); 
    $options = array(
     CURLOPT_HTTPHEADER => $header, 
     //CURLOPT_POSTFIELDS => $postfields, 
     CURLOPT_HEADER => false, 
     CURLOPT_URL => $full_url, 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_SSL_VERIFYPEER => false 
    ); 

    $feed = curl_init(); 
    curl_setopt_array($feed, $options); 
    $result = curl_exec($feed); 
    $info = curl_getinfo($feed); 
    curl_close($feed); 

    if ($info['http_code'] == 200) { 

     $result = json_decode($result); 

    } else { 

     $result = false; 

    } 

    return $result; 

} 

回答

0

你必須安排每小時cron,而不是必須在你的db中保存tweets。克隆得到推文可能是這樣的。

if (!wp_next_scheduled('hs_tweets_fetch_cron')) 
{ 
    wp_schedule_event(time(), 'hourly', 'hs_tweets_fetch_cron'); 
} 
add_action('hs_tweets_fetch_cron', 'hs_tweets_fetch'); 

function hs_tweets_fetch_cron() 
{ 
    1- // fetch the tweets 
    2- // Save/update the tweets in Wordpress options meta or custom table 
} 

而不是在數據庫表中顯示來自頁腳的推文。

0

我將使用WordPress瞬態API來代替這種類型的工作。

瞬態將使得與cron相同但不同。您可以設置截止日期,數據存儲在選項表中。如果臨時名稱不存在或者截止日期已結束,則該功能將使用您需要的數據創建瞬態。