2013-11-16 2 views
0

Проблема:запросы Twitter API каждые 16 минут

Я написал кусок PHP кода, который проверяет, существует ли имя пользователя в массиве против протокола Twitter API, но я не могу вполне понять, как вы можете скажите PHP или используйте jQuery вместе с PHP, чтобы проверять 180 имен пользователей каждые 16 минут (ограничение с GET for Twitter API - 180 звонков каждые 15 минут).

Любые идеи были бы очень оценены.

код PHP:

foreach ($wordArray as $key => $value) 
{ 
    echo ' 
     <p> 
      English word: ' . $value['English'] . '<br> 
      Latin word: ' . $value['Latin'] . '<br> 
     </p> 
    '; 

    $username  = $value['Latin']; 
    $url   = 'https://api.twitter.com/1.1/users/show.json'; 
    $requestMethod = 'GET'; 
    $getfield  = '?screen_name='.$username; 

    $twitter  = new TwitterAPIExchange($settings); 
    $result   = $twitter->setGetfield($getfield) 
           ->buildOauth($url, $requestMethod) 
           ->performRequest(); 

    // Decode the JSON results 
    $value   = json_decode($result); 

    // Compare the resulting screen name with the input variable 
    if (strtolower($value->screen_name) == $username) 
    { 
     echo '<p style="color:red;">The user exists!</p>'; 
    } 
    else 
    { 
     echo '<p style="color:green;">The user does not exist!</p>'; 
    } 
} 

Желаемое решение:

Произнесите $ wordArray имеет 700 значений, я хотел бы проверить 180 значений каждые 16 минут (чтобы быть на безопасной стороне) и добавлять их друг к другу. Таким образом, 180 вызовов, результат распечатки, ожидание 16 минут, 180 вызовов, распечатка результатов сразу после, ожидание 16 минут и т. Д.

+0

'' set_time_limit' и сон() 'приходит на ум, если блокировка не является проблемой? – adeneo

+0

Думаю, мне нужно поставить счетчик где-нибудь, но действительно ли первые 180 звонков печатаются? Когда я попробовал sleep() с датой ('h: i: s'), я получил оба раза сначала через 10 секунд, когда истек. – kexxcream

+0

Если вы не работаете с push-сервером, вы не можете сделать это с помощью PHP. Вы должны сделать обратный вызов с помощью javascript 'setInteval', который сделает XHRequest (ajax) вам PHP-скрипту для извлечения данных для вас ... –

ответ

0

Вот полное рабочее решение.

index.html

<!DOCTYPE html> 
<html> 
<head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
      var attemp_count = 0; 

      var auto_refresh = setInterval(function() 
      { 
       $.ajax({ 
        url: 'twuserlookup.php', 
        type: 'POST', 
        data: {attemp_count: attemp_count++} 
       }).done(function(data) 
       { 
        $('#mydiv').append(data); 
       }); 
       if(attemp_count > 775) 
       { 
        clearInterval(auto_refresh); 
       } 
      }, 6000); 
     }); 
    </script> 
</head> 
<body> 
    <div id="mydiv"></div> 
</body> 
</html> 

twuserlookup.php

<?php 
    // Initialize session 
    session_start(); 

    // Check if array exist 
    if (!isset($_SESSION['Words'])) 
    { 
     // Include API protocol for Twitter and Simple HTML DOM 
     require_once "dom/simple_html_dom.php"; 

     // Create DOM from URL or file 
     $html = file_get_html('http://www.latinwordlist.com/latin-word-for/index.php'); 

     // Go through each word pair 
     foreach(($html->find('body', 0)->find('li')) as $wordpair) 
     { 
      // Find English words 
      $items[] = array (
           'English' => strtolower($wordpair->find('a', 0)->innertext), 
           'Latin' => preg_replace('/\W\w+\s*(\W*)$/', '$1', strtolower($wordpair->find('dd', 0)->innertext)) 
          ); 
     } 

     $wordArray = array_filter(array_slice($items, 0, 775, true)); 

     $_SESSION['Words'] = $wordArray; 
    } 

    // Include API protocol for Twitter and Simple HTML DOM 
    require_once "TwitterAPIExchange.php"; 

    // Apply oAuth Access Token and Consumer Keys from Twitter Dev 
    $settings = array(
     'oauth_access_token'  => "", 
     'oauth_access_token_secret' => "", 
     'consumer_key'    => "", 
     'consumer_secret'   => "" 
    ); 

    if (array_key_exists('attemp_count', $_POST) && array_key_exists($_POST['attemp_count'], $_SESSION['Words'])) 
    {  
     echo ' 
      <p> 
       English word: ' . $_SESSION['Words'][$_POST['attemp_count']]['English'] . '<br> 
       Latin word: ' . $_SESSION['Words'][$_POST['attemp_count']]['Latin'] . '<br> 
      </p> 
     '; 

     $username  = $_SESSION['Words'][$_POST['attemp_count']]['Latin']; 
     $url   = 'https://api.twitter.com/1.1/users/show.json'; 
     $requestMethod = 'GET'; 
     $getfield  = '?screen_name='.$username; 

     $twitter  = new TwitterAPIExchange($settings); 
     $result   = $twitter->setGetfield($getfield) 
            ->buildOauth($url, $requestMethod) 
            ->performRequest(); 

     // Decode the JSON results 
     $value   = json_decode($result); 

     // Compare the resulting screen name with the input variable 
     if (strtolower($value->screen_name) == $username) 
     { 
      echo '<p style="color:red;">The user exists!</p>'; 
     } 
     else 
     { 
      echo '<p style="color:green;">The user does not exist!</p>'; 
     } 

    } 
?> 
Смежные вопросы