function twitter_standard_timeline($feed, $source)
{
    $output = array();
    if (!is_array($feed) && $source != 'thread') {
        return $output;
    }
    //32bit int / snowflake patch
    if (is_array($feed)) {
        foreach ($feed as $key => $status) {
            if ($status->id_str) {
                $feed[$key]->id = $status->id_str;
            }
            if ($status->in_reply_to_status_id_str) {
                $feed[$key]->in_reply_to_status_id = $status->in_reply_to_status_id_str;
            }
            if ($status->retweeted_status->id_str) {
                $feed[$key]->retweeted_status->id = $status->retweeted_status->id_str;
            }
        }
    }
    switch ($source) {
        case 'favourites':
        case 'friends':
        case 'replies':
        case 'retweets':
        case 'user':
            foreach ($feed as $status) {
                $new = $status;
                if ($new->retweeted_status) {
                    $retweet = $new->retweeted_status;
                    unset($new->retweeted_status);
                    $retweet->retweeted_by = $new;
                    $retweet->original_id = $new->id;
                    $new = $retweet;
                }
                $new->from = $new->user;
                unset($new->user);
                $output[(string) $new->id] = $new;
            }
            return $output;
        case 'search':
            foreach ($feed as $status) {
                $output[(string) $status->id] = (object) array('id' => $status->id, 'text' => $status->text, 'source' => strpos($status->source, '<') !== false ? html_entity_decode($status->source) : $status->source, 'from' => (object) array('id' => $status->from_user_id, 'screen_name' => $status->from_user, 'profile_image_url' => $status->profile_image_url), 'to' => (object) array('id' => $status->to_user_id, 'screen_name' => $status->to_user), 'created_at' => $status->created_at, 'geo' => $status->geo);
            }
            return $output;
        case 'directs_sent':
        case 'directs_inbox':
            foreach ($feed as $status) {
                $new = $status;
                if ($source == 'directs_inbox') {
                    $new->from = $new->sender;
                    $new->to = $new->recipient;
                } else {
                    $new->from = $new->recipient;
                    $new->to = $new->sender;
                }
                unset($new->sender, $new->recipient);
                $new->is_direct = true;
                $output[] = $new;
            }
            return $output;
        case 'thread':
            // First pass: extract tweet info from the HTML
            $html_tweets = explode('</li>', $feed);
            foreach ($html_tweets as $tweet) {
                $id = preg_match_one('#msgtxt(\\d*)#', $tweet);
                if (!$id) {
                    continue;
                }
                $output[$id] = (object) array('id' => $id, 'text' => strip_tags(preg_match_one('#</a>: (.*)</span>#', $tweet)), 'source' => preg_match_one('#>from (.*)</span>#', $tweet), 'from' => (object) array('id' => preg_match_one('#profile_images/(\\d*)#', $tweet), 'screen_name' => preg_match_one('#twitter.com/([^"]+)#', $tweet), 'profile_image_url' => preg_match_one('#src="([^"]*)"#', $tweet)), 'to' => (object) array('screen_name' => preg_match_one('#@([^<]+)#', $tweet)), 'created_at' => str_replace('about', '', preg_match_one('#info">\\s(.*)#', $tweet)));
            }
            // Second pass: OPTIONALLY attempt to reverse the order of tweets
            if (setting_fetch('reverse') == 'yes') {
                $first = false;
                foreach ($output as $id => $tweet) {
                    $date_string = str_replace('later', '', $tweet->created_at);
                    if ($first) {
                        $attempt = strtotime("+{$date_string}");
                        if ($attempt == 0) {
                            $attempt = time();
                        }
                        $previous = $current = $attempt - time() + $previous;
                    } else {
                        $previous = $current = $first = strtotime($date_string);
                    }
                    $output[$id]->created_at = date('r', $current);
                }
                $output = array_reverse($output);
            }
            return $output;
        default:
            echo "<h1>{$source}</h1><pre>";
            print_r($feed);
            die;
    }
}
Exemple #2
0
function twitter_standard_timeline($feed, $source)
{
    $output = array();
    if (!is_array($feed) && !is_array($feed->statuses) && $source != 'thread') {
        return $output;
    }
    if (is_array($feed)) {
        foreach ($feed as $key => $status) {
            if ($status->id_str) {
                $feed[$key]->id = $status->id_str;
            }
            if ($status->in_reply_to_status_id_str) {
                $feed[$key]->in_reply_to_status_id = $status->in_reply_to_status_id_str;
            }
            if ($status->retweeted_status->id_str) {
                $feed[$key]->retweeted_status->id = $status->retweeted_status->id_str;
            }
        }
    }
    switch ($source) {
        case 'search':
            $feed = $feed->statuses;
        case 'status':
        case 'favourites':
        case 'friends':
        case 'replies':
        case 'user':
            foreach ($feed as $status) {
                $new = $status;
                if ($new->retweeted_status) {
                    $retweet = $new->retweeted_status;
                    unset($new->retweeted_status);
                    $retweet->retweeted_by = $new;
                    $retweet->original_id = $new->id_str;
                    $new = $retweet;
                }
                $new->from = $new->user;
                unset($new->user);
                $output[(string) $new->id_str] = $new;
            }
            return $output;
        case 'directs_sent':
        case 'directs_inbox':
            foreach ($feed as $status) {
                $new = $status;
                if ($source == 'directs_inbox') {
                    $new->from = $new->sender;
                    $new->to = $new->recipient;
                } else {
                    $new->from = $new->recipient;
                    $new->to = $new->sender;
                }
                unset($new->sender, $new->recipient);
                $new->is_direct = true;
                $output[] = $new;
            }
            return $output;
        case 'thread':
            $html_tweets = explode('</li>', $feed);
            foreach ($html_tweets as $tweet) {
                $id = preg_match_one('#msgtxt(\\d*)#', $tweet);
                if (!$id) {
                    continue;
                }
                $output[$id] = (object) array('id' => $id, 'text' => strip_tags(preg_match_one('#</a>: (.*)</span>#', $tweet)), 'source' => preg_match_one('#>from (.*)</span>#', $tweet), 'from' => (object) array('id' => preg_match_one('#profile_images/(\\d*)#', $tweet), 'screen_name' => preg_match_one('#twitter.com/([^"]+)#', $tweet), 'profile_image_url' => preg_match_one('#src="([^"]*)"#', $tweet)), 'to' => (object) array('screen_name' => preg_match_one('#@([^<]+)#', $tweet)), 'created_at' => str_replace('about', '', preg_match_one('#info">\\s(.*)#', $tweet)));
            }
            return $output;
        default:
            echo "<h1>{$source}</h1><pre>";
            print_r($feed);
            die;
    }
}