Twitter提要的PHP类-警告:中为foreach()提供的参数无效

Twitter提要的PHP类-警告:中为foreach()提供的参数无效,php,twitter,Php,Twitter,我接管了一个网站,他们的推特订阅源有问题。我的PHP知识有限,无法解决这个问题 下面是他们提要的代码 我收到了多个警告 警告:为…中的foreach()提供的参数无效。。。。在线105等 出于隐私考虑,我已删除了作者和屏幕名称 有人能帮我或给我指出正确的方向吗 谢谢 <?php /** * feed.php * * A parsing and caching class for the Twitter Followers Feed * * @author ********* S

我接管了一个网站,他们的推特订阅源有问题。我的PHP知识有限,无法解决这个问题

下面是他们提要的代码

我收到了多个警告

警告:为…中的foreach()提供的参数无效。。。。在线105等

出于隐私考虑,我已删除了作者和屏幕名称

有人能帮我或给我指出正确的方向吗

谢谢

<?php

/**
 * feed.php
 *
 * A parsing and caching class for the Twitter Followers Feed
 *
 * @author ********* September 2013
 * @version  1.0
 * 
 */

class twitterFollowers
{
  /**
   * Array of Twitter data.
   * @access private
   * @var array
   */
    private $data = array();

  /**
   * [$count description]
   * @var integer
   */
  private $count = 1;

  /**
   * [$user_data description]
   * @var boolean
   */
  private $user_data = true;

  /**
   * [$replies description]
   * @var boolean
   */
  private $replies = true;

  /**
   * [$screenName description]
   * @var string
   */
  private $screenName = '*********';

  /**
   * Default construct.
   * Loads up data.
   * @access public
   * @return void
   */
  public function __construct()
  {
    require_once('twitteroauth/twitteroauth.php');
    require_once('config.php');
    $this->loadData();
  }

  /**
   * Fetches data either from cache if the cache file
   * is less than a day old, otherwise the url 
   * is retrieved, parsed and cached
   * @access private
   * @return void
   */
  private function loadData()
  {
    $data = array();

    if ( !$data = get_transient('twitter') ) {

      $connection = $this->getConnectionWithAccessToken(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);

      $tweets = $connection->get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=' . $this->screenName .  '&count=' . $this->count . '&trim_user=0&exclude_replies=1');

      $data = $tweets;

      set_transient('twitter', $data, 3600);
    }

    $this->data = $data;
  }


  public function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret) {
    $connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);
    return $connection;
  }

  /**
   * Returns complete array of data.
   * @access public
   * @return array the data.
   */
  public function getData() {

    return $this->cleanData();
  }

  public function cleanData() {

    $tweets = $this->data;
    $data = array();

    foreach ($tweets as $tweet) {

      $tweetText = $tweet->text;
        foreach($tweet->entities->user_mentions as $user_mention){
          $tweetText = str_replace('@'.$user_mention->screen_name,'<a href="https://twitter.com/'.$user_mention->screen_name.'/" target="_blank"><span class="tweet-entity">@</span>'.$user_mention->screen_name.'</a>',$tweetText);
        }

        foreach($tweet->entities->hashtags as $hashtag){
          $tweetText = str_replace('#'.$hashtag->text,'<a href="https://twitter.com/search/?q=%23'.$hashtag->text.'&src=hash" target="_blank"><span class="tweet-entity">#</span>'.$hashtag->text.'</a>',$tweetText);
        }

        foreach($tweet->entities->urls as $url){
          $tweetText = str_replace($url->url,'<a href="'.$url->expanded_url.'" target="_blank">'.$url->display_url.'</a>',$tweetText);
        }

        if ($tweet->entities->media) {
          foreach($tweet->entities->media as $media){
            $tweetText = str_replace($media->url,'<a href="'.$media->expanded_url.'" target="_blank">'.$media->display_url.'</a>',$tweetText);
          }
        }

        foreach($tweet->entities->symbols as $symbol){
          $tweetText = str_replace('$'.$symbol->text,'<a href="https://twitter.com/search?q=%24'.$symbol->text.'" target="_blank"><span class="tweet-entity">$</span>'.$symbol->text.'</a>',$tweetText);
        }

        $tweetText = nl2br($tweetText);
        $time = $this->get_timeago(strtotime($tweet->created_at));

        $data[] = array(
          'text' => $tweetText, 
          'time' => $time, 
        ); 
    }

    $data['user']['name'] = $tweets[0]->user->name;
    $data['user']['screen_name'] = $tweets[0]->user->screen_name;
    $data['user']['profile_img'] = $tweets[0]->user->profile_image_url;

    return $data;


  }

    /**
   * [get_timeago description]
   * @param  [type] $ptime [description]
   * @return [type]        [description]
   */
  public function get_timeago( $ptime ) {

        $etime = time() - $ptime;

        if( $etime < 1 ) {
            return 'less than 1 second ago';
        }

        $a = array( 12 * 30 * 24 * 60 * 60  =>  'year',
                    30 * 24 * 60 * 60       =>  'month',
                    24 * 60 * 60            =>  'day',
                    60 * 60             =>  'hour',
                    60                  =>  'minute',
                    1                   =>  'second'
        );

        foreach( $a as $secs => $str ) {
            $d = $etime / $secs;

            if( $d >= 1 ) {
                $r = round( $d );
                return $r . ' ' . $str . ( $r > 1 ? 's' : '' ) . ' ago';
            }
        }
    }

}

$twitterFollowers = new twitterFollowers;
$twitter = $twitterFollowers->getData();
date_default_timezone_set('Europe/London'); ?>

在您的for之前进行以下检查

if (is_array($values) || is_object($values))
{
    foreach ($tweets as $tweet)
    {
        // do stuff
    }
}

这听起来不像是Twitter类中的错误。 听起来您只是没有检查返回的值是否有要循环的内容

if($tweets){   //..you need to add a check like this..
    foreach($tweets as $tweet){
        echo $tweet;
    }
} else {
    echo 'No tweets found...';
}

谢谢你们的建议。事实证明,这是一个关于过期Twitter代币的问题。