とりあえず動作させてみよう「PHP+OAuthでTwitterに投稿」(追記あり)

公開日: : 最終更新日:2014/04/20 IT, Twitter


Nb4uで自動でTwitterに投稿したいと思ったのでTwitter周りについて調べてみた。

 何がやりたいか?

Nb4uにある新書データ(10日以内に発売予定の新書)を元に1日に1回(ぐらい)自動で投稿する。

投稿する内容は以下のような形式

「本の名前」 発売まであとX日 http://nb4u.pplace-service.com/ #nb4uinfo

 やったこと

  1. twitter developersに登録
  2. すぐに使えるスクリプトとしてtwitteroauth.phpとOAuth.phpをdownload
  3. cron用のスクリプトを記入
  4. cronに登録

1. twitter developersに登録

登録する際にログインしているのは、自動投稿したいTwitterアカウントにします。

記述した内容は以下のような感じです。

  • Application Name

    • ○○から投稿で表示される名前/「私の場合はnb4u_bot」にしました。
  • Description
  • Application Website
  • Organization
  • Application Type
  • Callback URL

    • 今回の用途では利用しません。
  • Default Access type

    • 書き込みが必要なので「Read & Write」にしています。
  • Application Icon

    • 今回の用途では特に利用しません。

登録が終わったら必要な値を取得しておきます。
「Application details」をクリックして以下の2つを取得します

  • コンシューマー・キー
  • コンシューマー・シークレット

さらに「My Access Token」をクリックして以下の2つを取得します。

  • Access Token (oauth_token)
  • Access Token Secret (oauth_token_secret)

2. すぐに使えるスクリプトの取得

自前で作るのも有りですが、今回は簡単に作ってしまおうということでtwitteroauth.phpとOAuth.phpをダウンロードします。
ダウンロードしたものを展開します。

3. スクリプトを作成

cron用のスクリプトを作成する前に、本当に動くのかを確認します。

<?php
require_once("twitteroauth.php"); //2でダウンロードしたファイルを読み込みます。
$consumer_key = "1で取得したコンシューマー・キー";
$consumer_secret = "1で取得したコンシューマー・シークレット";
$access_token = "1で取得したAccess Token"; //
$access_token_secret = "1で取得したAccess Token Secret";
$twitter = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
//Twitterへ投稿します。
$req = $twitter->OAuthRequest("https://twitter.com/statuses/update.xml","POST",array("status"=>"サンプル投稿"));

上記のスクリプトを実際に動かしてみて問題ないので、cron用のスクリプトを作成。
作り方は、定期的にデータ取得のためにCakePHP1.3でシェル機能を利用 | PPl@ceを参考。
※以下はサンプルです。

<?php
class BatchShell extends Shell {
    var $uses = array('book');
    function main() {
        $newBookData = $this->book->getNewBookData();
        if(empty($newBookData)) return;
        require_once("twitteroauth.php"); //2でダウンロードしたファイルを読み込みます。
        $consumer_key = "1で取得したコンシューマー・キー";
        $consumer_secret = "1で取得したコンシューマー・シークレット";
        $access_token = "1で取得したAccess Token"; //
        $access_token_secret = "1で取得したAccess Token Secret";
        $twitter = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
        foreach($newBookData as $key => $val)
        {
            $message = "「 " . $val["title"] . "」 発売まであと". $val["days"] ."日 http://nb4u.pplace-service.com/ #nb4uinfo";
            $req = $twitter->OAuthRequest("https://api.twitter.com/1/statuses/update.xml","POST",array("status"=> $message));
        }
    }
}

[追記]
2012年10月頃から「https://twitter.com/statuses/update.xml」は利用できなくなりました。
そのためバージョンを明記した「https://api.twitter.com/1/statuses/update.xml」に変更する必要があります。

4. cronに登録

そして最後は、cronに登録。
Twitterでは、同じ内容を投稿するのはアウトなので内容が変わるように1日に1回投稿するようにに調整。

これで自動で投稿されるようになりました。

 まとめ

これで、自分のアカウント(nb4u_bot)での自動投稿はできるようになりました。

他のユーザに対してこのようなことをするには、もう少し面倒なことをする必要が有ります。
ただ、それは今回とは異なるまた別の話。
※それもこの前、1から実装したので、どこかで機会があれば書きます。

 参考サイト

  1. PHP+OAuthでTwitter – SDN Project
  2. PHP+OAuth認証で、Twitterの自動投稿APIを作る|技術者もどきの備忘録

広告

関連記事

no image

Jenkins+Capistranoを設定した時にしたこと -「ポート変更」「公開鍵認証」対応-

* 前段階 上記にあるように、Jenkins+Capistranoの設定をしています。 ただし、設

記事を読む

no image

jQuery Mobileでミスしたこと -JSだけ最新にしてしまってレイアウト崩れたの巻-

* 前提(CDN先) jQuery Mobileを使う場合、cssを自前のサーバにおいて、jsはC

記事を読む

no image

iPhoneアプリ開発 -バックグラウンド処理をした際にはまったこと-

* おきたこと 以下のメソッドを用いて、処理に時間がかかるもの(ここだとhoge)をバックグラウンド

記事を読む

no image

さくらのVPSでJenkins -執事さんとご対面-

さくらのVPSを利用している方は多いかと思います。 私も、自分で遊ぶ用(開発用)として借りてみまし

記事を読む

no image

Androidアプリ開発 -リストをタッチして別ページ表示-

* 前提 -「設定画面」で各種項目を設定。 --Activity:ConfigActivity --

記事を読む

list-normal

jQuery Mobileのリストの見た目をちょっとカスタマイズ -覚書-

jQuery Mobileを使えば簡単にスマートフォン対応できる言えば出来るのですが、少しでもカスタ

記事を読む

WordPressプラグイン「WP Hatena Notation」にPullRequestを投げた話

WordPressではてな記法が利用できる「WP Hatena Notation」を重宝しています。

記事を読む

ndk

Androidアプリ開発 -画像処理をC言語で高速化-

* 画像を扱う際の問題(1):計算処理の遅さ 前回、セピア画像にする方法を書きました。

記事を読む

Jenkins + iPhoneアプリ(1) -執事を雇う-

アプリ開発をしていると、自動化出来るところは自動化したくなってきますよね。 開発しているアプリも増え

記事を読む

no image

研究室での進捗報告の方法について、ふと思ったこと

* 以下に加筆・修正して移動しました。

記事を読む

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑