LoginSignup
9
8

More than 5 years have passed since last update.

[PHP]アプリにTwitterの投稿機能を導入

Posted at

概要

先日のプロジェクトでのウェブアプリに記事を投稿すると、
TwitterとFacebookにも記事が投稿される機能を着手しました。
※二種類全部 有効期間更新無し(無期限)、SNSログイン無し(非認証)で 記事投稿できる

最初は意外と簡単だったんですが、いくつか困ったことがあったので、
その手順や注意事項などを振り替えてみます。

Facebookの方も記事を投稿しましたので、こちらをご参考してください。👏
🔗[Javascript]アプリにFacebookの投稿機能を導入(準備中)

また、以下の記事でそれぞれの注意事項と制約事項を話していますので、ぜひご参考してください。👏
🔗[PHP][Javascript]Twitter APIとFacebook APIのそれぞれ違う注意事項・制約事項

始める前

Twitter APIを扱うオープンソースライブラリは殆どの言語から提供しています。
Java
ASP
C++
Clojure
ColdFusion
.NET
Go
Javascript / node.js
Lua/Corona SDK
Objective-C
Perl
PHP
Python
Ruby
C
VBScript

また、PHPのAPIライブラリーは色んなことがあります。
🔗tmhOAuth (by @themattharris)
🔗twitteroauth (by @abraham)
🔗140dev Twitter Framework (by @140dev)
・ 🔗Twitter API: Engagement Programming (by @140dev)
🔗codebird-php (by @jublonet)
・ 🔗CodeIgniter-Twitter-Search-Library (by @elliottlan)
・ 🔗Zend Framework 1.12.2maintained (by @zend
・ 🔗freebird-phpmaintained (by @corbanb
・ 🔗Twitter-API-PHPmaintained (by @j7mbo)
・ 🔗TwitterOAuthby (by @Ricard0Per)
詳しくには🔗こちらをご参考してください。

今回はthemattharrisさんのtmhOAuthを利用しますので、
まず、導入するアプリのPHPバージョン5.3.0以上か確認しましょう。
以下のバージョンでしたら、他のAPIライブラリーを探してください。
存在しなくても、全然大丈夫です。
themattharris/tmhOAuthtmhOAuth.phpファイルだけで動作しているので
このファイルだけを下位バージョンに合わせるとオーケーです。

手順

Twitterの方はFacebookよりものすごく簡単ですし制約が少ないです。
その詳しい内容は以下の記事で話しています。
🔗[PHP][Javascript]Twitter APIとFacebook APIのそれぞれ違う注意事項・制約事項
言語はもちろんPHP(Vr.5.3)でございます。

それでは、順番は以下の通りです。

① Twitterアップを登録してAccessTokenを取得する

dev.Twitter.comManage Your AppsでTwitterアップリを生成します。
🔗Manage Your Apps
image

入力項目は「アプリの名前」・「説明」・「ウェブサイト」ぐらいで簡単です。

※「ウェブサイト」項目に以下のようにコメントされていますが、ローカル開発環境のアドレスを入れても問題ありません。
そして、APIも問題なく上手く動作します。(ちなみにFacebookAPIの方は違います! ラッキー >ㅁ <# )

Your application's publicly accessible home page, where users can go to download, make use of, or find out more information about your application.`

同意チェックしてCreate your Twitter applicationボタンを押すと完了( w o w ~! )
image

じゃ、Twitterアプリの生成が終わりました。
すぐアプリの情報ページに移動されます。
アプリ情報ページには
アプリの詳しい情報を確認する[Details]ページ、
設定を切り替えるのが出来る[Settings]ページ、
Token情報などを取得できる[Keys and Access Tokens]ページ、
アプリのアクセス権限を設定できる[Permissions]ページがあります。
image

他のページは一応置いておいて、
[Keys and Access Tokens]ページから必要な情報を取得して、PHPのリソースで設定しましょう。

Bootstrap/const.php
//twitterの連携ソースを指定
Configure::write('twitter_conf_source', array(
    'consumer_key'    => '*****************************',
    'consumer_secret' => '************************************',
    'user_token'      => '********************************************',
    'user_secret'     => '***************************',
    'curl_ssl_verifypeer' => false
));

以下の記事にも説明しましたが、TwitterAPIの方は有効期間がありません。

Access Tokenの有効期間はサービスプロバイダの政策によって異なる部分があるが、
🔗ツイッターOAuth faqを確認すれば、現在Access Tokenの有効期間はない(!)と明示しています。
image
したがって、トークンの保管に注意をする必要があるはずです。

🔗[PHP][Javascript]Twitter APIとFacebook APIのそれぞれ違う注意事項・制約事項
なので、ぜひできるだけencapsulationしてください。

② tmhOAuth.phpをインストール
・composerで入れ込む
composer.json
"require": {
    "themattharris/tmhoauth": "0.8.*",
}
・クローンで入れ込む
git.command
git clone git@github.com:themattharris/tmhOAuth.git
③ 利用

まず、ライブラリーをインポートします。

TwitterUp.php
App::import('Vendor', 'themattharris/tmhoauth/tmhOAuth');

画嬢がある場合と無い場合はパラメーターとAPIのurlが違いますので、区別しましょう。
コードは以下の通りです。

・画嬢がある記事の投稿方法
TwitterUp.php
//画嬢ある記事投稿
$twitter_conf_source = $this->TwitterUp->conf('twitter_conf_source');

$up_twitter_image = WWW_ROOT . IMAGES_URL . $Model->alias . '/' . $registerdData[$Model->alias]['id'] . '/img1/' . $registerdData[$Model->alias]['img1']['file_name'];
$up_twitter_image_name  = basename($up_twitter_image);
$params = array(
    'media[]'  => "@{$up_twitter_image};type=image/jpeg;filename={$up_twitter_image_name}",
    'status'   => "{$up_twitter_content}"
);
$endpoint = $tmhOAuth->url('1.1/statuses/update_with_media');

・画嬢がない記事の投稿方法
TwitterUp.php
//画嬢ない記事投稿
$params = array('status'   => $up_twitter_content);
$endpoint = $tmhOAuth->url('1.1/statuses/update');));

他の注意点も結構あります。
以下の記事にその詳しい情報がありますので、ぜひご確認してください。👏
🔗[PHP][Javascript]Twitter APIとFacebook APIのそれぞれ違う注意事項・制約事項

④ Twitter Card

色んなブログに"認証"の手順が必要だと説明が置いていますし、そのリンクもありましたが、
そのリンクは404エラーを表示しています。
また、🔗ドキュメントの説明と色んなブログの記事に書いている内容がほぼ違っていて、
バージョンが上がりながら、政策が変わったらしいです。
つまり、認証はいらないです。

以下は導入方法でございます。
ものすごく簡単です。

1) 🔗ドキュメントの以下の7つの種類で一つを選んでください。

🔗Summaryカード: デフォルトのカードで、タイトル、説明、サムネイル、Twitterアカウントの属性が含まれ
🔗大きな画像付きのSummaryカード: Summaryに似ていますが、画像が目立つように使用されています。
🔗Photoカード: 写真のみを含めたカードです。
🔗Galleryカード: 4つの写真を集めて強調したカードです。
🔗Appカード: モバイルアプリの詳細を含めて直接ダウンロードできるようにしたカードです。
🔗Playerカード: 動画やオーディオ、スライドショーを視聴できるカードです。
🔗Productカード: 製品情報のために最適化したカードです。

2) リンクをクリックして例のタグをご参考してフロジェクトに反映してください。
view_layout.ctp
<meta name="twitter:site" content="@nytimes">
<meta name="twitter:creator" content="@SarahMaslinNir">
<meta name="twitter:title" content="Parade of Fans for Houston’s Funeral">
<meta name="twitter:description" content="NEWARK - The guest list and parade of limousines with celebrities emerging from them seemed more suited to a red carpet event in Hollywood or New York than than a gritty stretch of Sussex Avenue near the former site of the James M. Baxter Terrace public housing project here.">
<meta name="twitter:image" content="http://graphics8.nytimes.com/images/2012/02/19/us/19whitney-span/19whitney-span-articleLarge.jpg">

🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻
image

view_layout.ctp
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@flickr" />
<meta name="twitter:title" content="Small Island Developing States Photo Submission" />
<meta name="twitter:description" content="View the album on Flickr." />
<meta name="twitter:image" content="https://farm6.staticflickr.com/5510/14338202952_93595258ff_z.jpg" />

🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻
image

3) ちゃんと反映されたか確認してください。

🔗こちらでTwitterCard 設定(タグ)を反映したurlを入れて、
ちゃんと設定しているかをご確認してください。
エラーのログと結果の姿をすぐ確認できますので、すごく便利です。
image
※導入方法は🔗ドキュメントにも優しく説明されていますので、ご参考してください。

エラー確認

APIからレスポンスデータをしっかりあうログファイルで記録しましょう。
以下はログの情報でございます。
🔗Error Codes & Responses HTTP Status Codes
image
image
image

注意事項確認必須

方法はものすごく簡単ですが、ケースによって以下のように色んなバグが発生されるかもしれません。
なので、しっかり確認しましょう。
🔗[PHP][Javascript]Twitter APIとFacebook APIのそれぞれ違う注意事項・制約事項
・curl timeout error (code: 28)
・内容のサイズチェック制限(画嬢&本文)
・同じ記事は再び投稿不可能
・など など・・・

以上です!👏

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8