CakePHP で簡単に Twitter にツイートできるコンポーネント TsubuyakiComponent というのを作成しました。TsubuyakiComponent を使うには Consuming OAuth-enabled APIs with CakePHP なども必要です。
本記事では TsubuyakiComponent の具体的な使い方や仕様についてまとめています。始めて使う方は本記事を参考に実装してみてください。
TsubuyakiComponent
定数に Twitter の API キーなどを入力してください。Google の API キーは URL の短縮に使用するものです。このキーが入力されていなくても URL の短縮はなされます。URL の短縮は投稿の際の文字数が多い時に行われます。URL も含めて140文字以内で収まる場合は URL は短縮されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | class TsubuyakiComponent extends Component { const TWITTER_CONSUMER_KEY = '', TWITTER_CONSUMER_SECRET = '', TWITTER_ACCESS_TOKEN = '', TWITTER_ACCESS_TOKEN_SECRET = '', GOOGLE_APIKEY = ''; public function twitter_post($head_text, $message, $url) { App::import('Vendor', 'OAuth', array('file' => 'OAuth/OAuthClient.php')); $consumer = new OAuthClient(self::TWITTER_CONSUMER_KEY, self::TWITTER_CONSUMER_SECRET); $post_message = $this->shorten_message($head_text, $message, $url); return $consumer->post(self::TWITTER_ACCESS_TOKEN, self::TWITTER_ACCESS_TOKEN_SECRET, 'http://twitter.com/statuses/update.xml', Array('status' => $post_message)); } private function shorten_message($head_text, $message, $url, $max_str = 140) { $head_num = mb_strlen($head_text); $title_num = mb_strlen($message); $url_num = mb_strlen($url); if(($head_num + $title_num + $url_num) < $max_str) { $tweet_text = $head_text . $message . ' ' . $url; } else { $shorten_url = $this->shorten_url($url); $url_num = mb_strlen($shorten_url); if(($head_num + $title_num + $url_num) < $max_str) { $tweet_text = $head_text . $message . ' ' . $shorten_url; } else { $max_limit = $max_str - $head_num - $url_num - 4; $tweet_text = $head_text . mb_substr($message, 0, $max_limit) . '... ' . $shorten_url; } } return $tweet_text; } private function shorten_url($url) { $curl = curl_init(); if(self::GOOGLE_APIKEY === '') { $urlparam = ''; } else { $urlparam = '?key=' . $this->setting['GOOGLE_APIKEY']; } curl_setopt($curl, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url' . $urlparam); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, '{"longUrl":"' . $url . '"}'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($curl); curl_close($curl); $json = json_decode($res); return $json->id; } } |
使い方
下記のようにコンポーネントを呼び出して、使いたい部分で以下のようにコンポーネントの twitter_post() を呼び出せば良いです。第一引数には先頭の文字「ブログを書きました」などです。第二引数にはメッセージ、ブログを投稿する場合はブログのタイトルがここに挿入されます。第3引数は URL です。
1 2 3 4 5 6 7 8 9 | class TestController extends AppController { public $components = Array('Tsubuyaki'); public function index() { $this->Tsubuyaki->twitter_post('New blog post: ', 'This issue is according to our specification.', 'http://weble.org'); } } |
おわりに
使い方で分からない事があれば質問してください。今後は Facebook への投稿機能も実装予定です。
コメント