5

Twitter API 1.1 Get statuses メソッドを使用して、クライアントの Web サイトのアカウントから最新のツイートを返します。これは正常に機能していますが、クリック可能なリンクとして含まれている可能性のあるリンク (含まれているユーザー名と含まれているリンクの両方) をレンダリングする方法に関する明確なドキュメントが見つかりませんか?

含まれているすべてのリンクが XML に含まれていることが JSON 応答でわかりますが、レンダリングされた出力にクリック可能なリンクを追加する方法が明確ではありません。新しい API に関するドキュメントには、実用的な例が欠けているようです。

誰でもアドバイスできますか?

最新のツイートを引き出すために使用しているコードは次のとおりです。

$token = 'TOKEN HERE';
$token_secret = 'TOKEN SECRET HERE';
$consumer_key = 'CONSUMER KEY HERE';
$consumer_secret = 'CONSUMER SECRET HERE';

$host = 'api.twitter.com';
$method = 'GET';
$path = '/1.1/statuses/user_timeline.json'; // api call path

$query = array( // query parameters
'screen_name' => 'SCREEN NAME HERE',
'count' => '1'
);

$oauth = array(
'oauth_consumer_key' => $consumer_key,
'oauth_token' => $token,
'oauth_nonce' => (string)mt_rand(), // a stronger nonce is recommended
'oauth_timestamp' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_version' => '1.0'
);

$oauth = array_map("rawurlencode", $oauth); // must be encoded before sorting
$query = array_map("rawurlencode", $query);

$arr = array_merge($oauth, $query); // combine the values THEN sort

asort($arr); // secondary sort (value)
ksort($arr); // primary sort (key)

// http_build_query automatically encodes, but our parameters
// are already encoded, and must be by this point, so we undo
// the encoding step
$querystring = urldecode(http_build_query($arr, '', '&'));

$url = "https://$host$path";

// mash everything together for the text to hash
$base_string = $method."&".rawurlencode($url)."&".rawurlencode($querystring);

// same with the key
$key = rawurlencode($consumer_secret)."&".rawurlencode($token_secret);

// generate the hash
$signature = rawurlencode(base64_encode(hash_hmac('sha1', $base_string, $key, true)));

// this time we're using a normal GET query, and we're only encoding the query params
// (without the oauth params)
$url .= "?".http_build_query($query);

$oauth['oauth_signature'] = $signature; // don't want to abandon all that work!
ksort($oauth); // probably not necessary, but twitter's demo does it

// also not necessary, but twitter's demo does this too
function add_quotes($str) { return '"'.$str.'"'; }
$oauth = array_map("add_quotes", $oauth);

// this is the full value of the Authorization line
$auth = "OAuth " . urldecode(http_build_query($oauth, '', ', '));

// if you're doing post, you need to skip the GET building above
// and instead supply query parameters to CURLOPT_POSTFIELDS
$options = array( CURLOPT_HTTPHEADER => array("Authorization: $auth"),
//CURLOPT_POSTFIELDS => $postfields,
CURLOPT_HEADER => false,
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false);

// do our business
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);

$twitter_data = json_decode($json);
4

2 に答える 2

11

ご回答ありがとうございます。アッシュビルの人たちからのこのブログ投稿のおかげで、実際に解決策を見つけました - http://www.appliedtns.com/blog/tag/twitter/

それは私にとってはうまくいきます。

// Parse any links found in our tweet
$formatted_text = preg_replace('/(\b(www\.|http\:\/\/)\S+\b)/', "<a target='_blank' href='$1'>$1</a>", $post->text);
$formatted_text = preg_replace('/\#(\w+)/', "<a target='_blank' href='http://search.twitter.com/search?q=$1'>#$1</a>", $formatted_text);
$formatted_text = preg_replace('/\@(\w+)/', "<a target='_blank' href='http://twitter.com/$1'>@$1</a>", $formatted_text);
于 2013-03-26T09:44:00.803 に答える
0

これが正確に必要かどうかはわかりませんが、アプリケーションに tmhOAuth ライブラリを使用しています。https://github.com/themattharris/tmhOAuth-examplesを参照してください。Matt Harris の例のコードを使用して、応答をループし、以下のコードのように出力を作成します。ツイート内のリンクは、ライブラリ関数によって作成されますentify_with_options($tweet)

// Decode response
$timeline = json_decode($this->tmhOAuth->response['response'], true);

if(!$timeline){
throw new Exception('Error: No response was found.');
}
else{
//  Start building the output
foreach ($timeline as $tweet) :

         ... start of response processing

         // Format and set tweet text 
     $tw_entified_tweet = tmhUtilities::entify_with_options($tweet);

         //  Format and set creation date for permalink
     $tw_created_at_formatted = is_twitterlist_format_date($tweet['created_at']);

         //  Format and set permalink
     $tw_permalink = str_replace(
    array(
        '%screen_name%',
        '%id%',
        '%created_at%'
    ),
    array(
        $tweet['user']['screen_name'],
        $tweet['id_str'],
        $tw_created_at_formatted,
        ),
        '<a href="https://twitter.com/%screen_name%/status/%id%" target="_blank">%created_at%</a>'
     );

         ... end response processing


    endforeach;
}

日付形式関数は次のとおりです。

function is_twitterlist_format_date($created_date)
{
    if ( is_null($created_date)) {
        return '';
    }
    else{
        // Format: March 4th, 9:19 am
        return date('F jS, g:i a', strtotime($created_date));
    }
}

これが役に立つことを願っています。

于 2013-03-25T13:25:32.977 に答える