[PHP] わかりやすいOAuth解説サイトまとめ

先日Twitter APIを使ってBotを作成したときにOAuthと呼ばれる認証処理が必要になった。オープンソースのライブラリがあったので、自前で認証手順を実装する必要が無くて楽できたけど、できればOAuthの基本的な予備知識は押さえておきたい。ネットを検索したらわかりやすい解説サイトが幾つか見つかったので以下にリンクを載せておく。

OAuth Community Site (公式サイト)
http://oauth.net/

非技術者のためのOAuth認証(?)とOpenIDの違い入門 | .Nat Zone – Identity, Privacy and Music
http://www.sakimura.org/2011/05/1087/

APIアクセス権を委譲するプロトコル、OAuthを知る - @IT
http://www.atmarkit.co.jp/fsecurity/special/106oauth/oauth01.html

OAuth 2.0でWebサービスの利用方法はどう変わるか(1/3)- @IT
http://www.atmarkit.co.jp/fsmart/articles/oauth2/01.html

デジタル・アイデンティティ技術最新動向(2):RFCとなった「OAuth 2.0」――その要点は? (1/2) – @IT
http://www.atmarkit.co.jp/ait/articles/1209/10/news105.html

単なる OAuth 2.0 を認証に使うと、車が通れるほどのどでかいセキュリティー・ホールができる | .Nat Zone – Identity, Privacy and Music
http://www.sakimura.org/2012/02/1487/

[PHP] INIファイルを読み込むには

プログラムのちょっとした設定など、データベースよりもINIファイルに保存したほうが便利なこともある。

PHP自体もphp.iniというファイルに設定を保存しているところをみると、きっと標準関数が用意されているだろうと思って調べたら案の定。INIファイルをパースして連想配列に設定値を取り込んでくれるみたい。

PHP: parse_ini_file – Manual
http://jp.php.net/manual/ja/function.parse-ini-file.php

PHPの一般的なファイル入出力に関しては以下のページが参考になる。

ファイル入出力 | PHP Labo
http://www.php-labo.net/tutorial/php/file.html

[PHP] HTTP認証を行うには

必要に迫られて調べたところ、Apacheで.htaccessを使わずとも、PHPでHTTP認証(Basic/Digest)を行うことができるらしい。

Basic HTTP 認証の例

PHPファイルで実装された機能のみを制限したい場合にはこの方法は役立ちそう。サーバー上に格納されているファイルを保護したい場合などには、やはりディレクトリ単位でアクセス制限を掛けたいので.htaccessによる認証を使う必要がある。場合によって使い分けよう。

参考サイト

PHP: PHP による HTTP 認証 – Manual
http://php.net/manual/ja/features.http-auth.php

phpでベーシック認証 – bnote
http://www.bnote.net/php/php/22_basic_auth.shtml

[PHP] ウェブスクレイピングに役立つHTMLパーサーの参考リンクまとめ

ウェブスクレイピングという言葉がある。英語だとWeb Scraping。ちなみにScrapは「新聞記事を切り抜いてスクラップする」の「スクラップ」と同じだけど、ingが付くと「スクラッピング」じゃなくて「スクレイピング」と読む。ウェブサイトから情報を抽出することを「ウェブスクレイピング」と呼ぶらしい。

ウェブスクレイピング – Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0

ウェブサイトから情報を取得する場合、RSSやウェブサービスなどのAPIが用意されていればそれを使うけど、そうじゃなければウェブページのソースから情報を抜き出す仕組みが必要になる。それがウェブスクレイピングだ。ウェブスクレイピングに役立ちそうなHTMLパーサーを探したところ幾つかヒットしたので、実際に試しているブログ記事などと共に以下にリンクをまとめておく。たぶん近いうちにお世話になりそう。

Simple HTML DOM Parser

PHP Simple HTML DOM Parser
http://simplehtmldom.sourceforge.net/

PHPでHTMLをパースして解析、編集して保存する方法 – さとうさんのキロク
http://sato-san.hatenadiary.jp/entry/2013/05/06/155919

PHP Simple HTML DOM Parserの使用方法 – Webスクレイピング ライブラリ
http://www.crystal-creation.com/web-app/tech/programming/php/library/simplehtmldom/

PHP Simple HTML DOM Parserを使ったWebスクレイピング入門 – Qiita
http://qiita.com/esehara@github/items/db231c99f8076aabdfb2

DOMDocument

PHP: DOM – Manual
http://www.php.net/manual/ja/book.dom.php

PHPでHTMLをパースして解析する簡単な方法 | 三度の飯とエレクトロン
http://blog.katty.in/1400

Goutte

fabpot/Goutte · GitHub
https://github.com/fabpot/goutte

WebスクレイピングライブラリGoutteで遊んでみる – hnwの日記
http://d.hatena.ne.jp/hnw/20120115

そろそろ Simple HTML DOM Parser を使うのはやめたほうがいい – localdisk
http://localdisk.hatenablog.com/entry/2014/02/05/%E3%81%9D%E3%82%8D%E3%81%9D%E3%82%8D_Simple_HTML_DOM_Parser_%E3%82%92%E4%BD%BF%E3%81%86%E3%81%AE%E3%81%AF%E3%82%84%E3%82%81%E3%81%9F%E3%81%BB%E3%81%86%E3%81%8C%E3%81%84%E3%81%84

[PHP] Twitter bot開発者のための参考サイトまとめ

公式サイト

Twitter
https://twitter.com/

Twitter Developers
https://dev.twitter.com/

Twitterのルールや制限など

Twitterヘルプセンター | フォローに関するルールと留意点
https://support.twitter.com/articles/251786-#

Twitterヘルプセンター | Twitterリミットについて(更新、API、DM、およびフォロー)
https://support.twitter.com/articles/249071-twitter-apidm

Twitterヘルプセンター | Automation rules and best practices
https://support.twitter.com/articles/76915-automation-rules-and-best-practices#

PHPライブラリ

abraham/twitteroauth · GitHub
The first PHP Library to support OAuth for Twitter’s REST API
https://github.com/abraham/twitteroauth

プログラミング参考サイト

PHP + OAuthで Twitter botをつくってみよう – PHP入門 – Webkaru
http://webkaru.net/php/twitter-bot/

Twitterを100倍楽しむためのbot開発基礎講座:連載|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/twitterbot

PHP+OAuthでTwitter – SDN Project
http://www.sdn-project.net/labo/oauth.html

PHP+OAuthでTwitterのBotを作ってみる – SDN Project
http://www.sdn-project.net/labo/twitter_bot.html

Twitter API v1.1 で自動フォロー返し機能を実装する : プログラミング for ツイッタラー
http://twitterer.blog.jp/archives/1482724.html

bot開発物語 その7(最終回)―自動フォロー返し― | おくみん公式ブログ
http://blog.okumin.com/archives/twitter-bot-7

[PHP] 相互リンクされていないフォロワーをアンフォローするTwitter bot

今回もTwitter botネタ。今回は相互リンクしていないフォロワーを自動アンフォローする機能。

相互フォローとは

自分が相手をフォローしていて、相手も自分をフォローしてくれている状態。

自動アンフォローの原理

  1. 自分をフォローしている人(フォロワー)のリストを取得 (Twitter API: followers/ids)
  2. 自分がフォローしている人(フォロー)のリストを取得 (Twitter API: friends/ids)
  3. 2つのリストをぶつけて、自分はフォローしているけど自分をフォローしてくれていない人を特定。
  4. 特定した人をアンフォローする (Twitter API: friendships/destroy)

サンプルコード

[PHP] 自動フォローバックするTwitter bot

昨日作成したTwitter botをいじっているんだけど結構面白い。今回は自動フォローバックを実装したので覚え書き。

自動フォローバックとは

自分をフォローしてくれているんだけど、自分からはフォローしていない人を自動的にフォローする機能。リアルタイムじゃなくてcronを使って周期的に処理することで実現する。

自動フォローバックの原理

とても原始的。

  1. 自分をフォローしている人(フォロワー)のリストを取得 (Twitter API: followers/ids)
  2. 自分がフォローしている人(フォロー)のリストを取得 (Twitter API: friends/ids)
  3. 2つのリストをぶつけて、自分はフォローしていないけど自分をフォローしてくれている人を特定。
  4. 特定した人をフォローする (Twitter API: friendships/create)

サンプルコード

[PHP] お手軽にTwitter botを作る

定型文をツイートするTwitter botが必要になったので作る。以下覚え書き。

Twitter botとは

ボット(bot)とは

Twitter の機能を使って作られた、機械による自動発言システム。語源はロボットから来ている。特定の時間に自動ツイートする bot、ユーザーの bot 宛の発言にリプライする bot、特定のキーワードに反応する bot 等、様々な bot が存在する。

Twitter「ボット(bot)とは」とは?|ツイッター用語 – ツイナビ
http://twinavi.jp/guide/section/twitter/glossary/%E3%83%9C%E3%83%83%E3%83%88%EF%BC%88bot%EF%BC%89%E3%81%A8%E3%81%AF

今回作るbotは、あらかじめ用意した文章を決まったタイミング(たとえば毎時零分)でツイートするもの。

参考サイト

Twitterは途中からアカウント認証方式がOAuthに変更されている。ネットを検索するとTwitter bot開発の記事がたくさんヒットするけど、旧認証方式を使った古い記事も多い。いくつかの記事を読んでみた結果、以下の記事が簡潔でわかりやすかったので、この記事をお手本にして作業を進める。

PHP + OAuthで Twitter botをつくってみよう – PHP入門 – Webkaru
http://webkaru.net/php/twitter-bot/

Twitterアカウントを作る

まずは当然のこととしてTwitterアカウントが必要なので普通に作る。

開発者サイトにログイン

Twitter開発者サイトに自分のTwitterアカウントでログインする。

Twitter Developers
https://dev.twitter.com/

Twitter Appの作成

以下はTwitter開発者サイトでの作業。

  1. 画面右上の自分のアイコンをクリックして[My applications]を選択する。
  2. [Twitter Apps]ページで[Create New App]ボタンを押下する。
  3. [Create an application]ページで[Application details]に必要事項を入力する。
    [Name*] Twitter Appの名前(必須)
    [Description*] Twitter Appの説明(必須)
    [Website*] ウェブサイト(必須)
    [Callback URL] 認証に成功した後にジャンプするURL。今回作成するBotには必要なさそうなので空白
  4. [Developer Rules of the Road]の規則に目を通して Yes, I agree.にチェックする。
  5. [Create your Twitter application]ボタンを押下する。

すると、以下のメッセージが表示されてアプリケーションが作成される。

アクセスレベルの変更

Botのアクセスレベルを設定する。デフォルトはRead onlyだけど、これはTwitterアカウントが受け取ったツイートを読み取るだけの権限のようなので、Botからツイート(書き込み)できるようにアクセスレベルを変更する必要がある。

  1. Twitter Appの[API Keys]タブをクリック。
  2. [Application settings]エリアの[Access level]を[Read-only]から[Read and Write]に変更する。

Twitterアカウントによっては、アカウントに電話番号が紐付けされていないと書き込み権限が付与できない場合がある。2つのアカウントで試したところ、1年近く運営しているアカウント(フォロワー数は1,000超)だとすんなり書き込み権限を付与できたけど、1週間ほど前に作成したアカウント(フォロワー数は百以下)で書き込み権限を付与しようとしたら、アカウントに電話番号を登録するように言われた。電話番号を登録した後は、問題なく書き込み権限を付与できた。

Twitter Help Center | Adding your mobile number to your account
https://support.twitter.com/articles/110250-adding-your-mobile-number-to-your-account-via-web#

アクセストークンの作成

次はアクセストークンを作成する。アクセストークンは見ず知らずのBotが成りすまして自分のアカウントにツイートするのを防ぐために必要なのだろう。ボタンを押すだけなので難しいことはない。

  1. Twitter Appの[API Keys]タブをクリックする。
  2. ページの下のほうの[Your access toke]エリアにスクロール。
  3. [Create my access token]ボタンを押下する。

これでTwitter Appの設定は完了。画面に表示されている情報のうち、Bot運営に必要なのは以下の4項目。

  • API key
  • API secret
  • Access token
  • Access token secret

Botソフトの作成

参考サイトに紹介されていた以下のPHPコードを使うとメチャ楽だ。

abraham/twitteroauth · GitHub
The first PHP Library to support OAuth for Twitter’s REST API
https://github.com/abraham/twitteroauth

サブディレクトリtwitteroauthを作成して以下のファイルを配置しておく。

  • twitteroauth/OAuth.php
  • twitteroauth/twitteroauth.php

Botは以下のように簡単に書ける。

この例では固定テキストメッセージをツイートしているが、ファイルやデータベースにあらかじめメッセージを用意しておくことで、都度ロードしてバラエティに富んだ内容をツイートすることも可能だろう。動作確認したらcronに登録して自動運転させれば完成。

さらに参考サイト

以下のサイトは説明が詳細で参考になる。

Twitterを100倍楽しむためのbot開発基礎講座:連載|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/twitterbot

PHP+OAuthでTwitter – SDN Project
http://www.sdn-project.net/labo/oauth.html

PHP+OAuthでTwitterのBotを作ってみる – SDN Project
http://www.sdn-project.net/labo/twitter_bot.html

[PHP] BitlyのWebAPIを使ってURLを短縮する

先日作成したTwitter botのツイートにサイトURLを短縮して含めたいというニーズあり。調べたところ、短縮URLを生成する機能は各社からWeb APIとして提供されている模様。参考になる記事を探したら以下が非常にわかりやすかったので、この記事に倣ってbitlyのWeb APIを使って短縮URL生成機能を実装してみる。

bit.ly API|短縮URL|Web関連特集|PHP & JavaScript Room
http://phpjavascriptroom.com/?t=topic&p=bitlyapi

OAuth2認証は必要なし、API Keyによる認証でOK

bitlyのオンラインドキュメントを読むと、APIを使うにはユーザ認証が必要。認証方式はOAuth2。だけど、短縮URLの生成に限っては、OAuth2に加えてAPI Keyによるシンプルな認証も可能みたい。実装が少しでも楽になるのはうれしいので、API Keyで認証することにする。

bitly API Documentation
http://dev.bitly.com/links.html#v3_shorten

bitly API Documentation
http://dev.bitly.com/

bitlyのウェブサイトでAPI Keyを取得する

以下のページからサインアップしてAPI Keyを取得する。

Bitly. The power of the link.
https://bitly.com/a/your_api_key

サンプルコード

[PHP] 画像をダウンロードして保存する

画像をダウンロードするにはいろんな方法がありそうだけど、普通にPHPの組み込み関数で出来たので覚え書き。

PHP: file_get_contents – Manual
http://www.php.net//manual/ja/function.file-get-contents.php

タイムアウトとかリダイレクトとか細かい制御をしたければPearのHTTP_Requestでも使うかな。

HTTP_Request
http://pear.php.net/package/HTTP_Request/