WEBLE

CakePHP で簡単に Twitter にツイートできるコンポーネント TsubuyakiComponent

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 への投稿機能も実装予定です。

関連記事

コメント

コメントは受け付けていません。

AltStyle によって変換されたページ (->オリジナル) /