2016-10-07

C++でTwitter APIを利用する

C++を用いたTwitter投稿プログラムの新版「twicpps」です。古い方「twicpp」もそのまま残してありますが、今後使用する場合は、ここで公開しているものを使用してください。

2014年01月15日にTwitter APIの仕様変更が行われて、httpを利用したTwitter APIが利用できなくなりました。今後はhttps(SSL接続)のみがサポートされます。

ソースコードのみの配布となります。各自アプリケーションを登録して、コンパイルして使用してください。C/C++の開発環境を扱える方を対象としています。Windows、Linux、Mac OS Xに対応しています。OpenSSLが必要です。

ダウンロード

GitHubからクローンしてください。

GitHub

C++11に対応していないコンパイラ(MSVC2008等)を使用する場合は、古いバージョンをダウンロードしてください。画像投稿機能はサポートされません。

twicpps-20140325.zip ※このソースは今後メンテナンスされません。

更新履歴

特徴

アプリケーションを登録

アプリケーションを登録するには、Twitterに携帯電話番号を登録する必要があります。設定画面から「モバイル」を選択し、電話番号を入力し、「続ける」ボタンを押します。

認証コードがショートメールで送られてきますので、それを入力し、「携帯電話を認証する」ボタンを押します。

「電話番号を登録できませんでした。再度お試しください。」と表示されて失敗することがよくあります。その場合、エラー画面でブラウザの更新ボタン(または、F5やCtrl+R等)を押して、同じ認証コードを再入力すると成功することがあります。

「開発者」のリンクをクリックします。

ページの下の方へスクロールし、「Manage Your Apps」をクリックします。

「Create New App」ボタンを押します。

Name(名前)、Description(説明)、Website(ウェブサイト)を入力します。Nameは最大32文字、Descriptionは10~200文字とします。

Developer Agreement を読んで、Yes, I agree にチェックを入れて、「Create your Twitter application」ボタンを押します。

以下のようなエラーが出た場合、携帯電話番号の登録ができていません。前述の方法で電話番号の登録を行ってください。

Nameが長すぎたとき、Descriptionが短すぎたときもエラーが出ますので、設定を確認します。

登録が成功すると、次のような画面になります。「Keys and Access Tokens」をクリックします。

「Create my access token」ボタンを押します。

コンパイル

このページのトップから twicpps-XXXXXXXX.zip をダウンロードします。適当な作業用ディレクトリを作成して、そこに展開します。

上記 GitHubからクローンします。

Visual Studio と Qt Creator 用のプロジェクトファイルを用意しています。お好きな開発環境をご利用ください。Unix系ではMakefileもありますので、コマンドラインでメイクすることもできます。

準備:Windows

Visual Studio 2013以降を想定しています。OpenSSLを事前にコンパイルしておいてください。twicpps.slnを開いたら、プロジェクトのプロパティを開き、OpenSSLのインクルードとライブラリのディレクトリを定義します。

準備:Linux

g++一式を準備してください。OpenSSLが必要です。Debian系なら aptitude install libssl-dev を行っておきます。

準備:Mac OS X

最近のMac OSではOpenSSLのヘッダファイルを使用することができません。その場合、Homebrewを使ってopensslをインストールする必要があります。 Homebrewを使ったOpenSSLのインストール方法は、各自検索してお調べください。

キーファイルの作成

登録したアプリケーションに応じて、キー文字列を設定します。

twicpps/keys/mykey.h

static char const consumer_key[]    = "xxxxxxxxxxxxxxxxxxxxxx";
static char const consumer_sec[]    = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
static char const accesstoken[]     = "0000000000-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
static char const accesstoken_sec[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

キーを定義するためのヘッダファイルを用意し、内容をコピーします。

Access Level が Read and write になっていることを確認します。

main.cppを開いて、キーを記述したヘッダファイルをインクルードするようにします。

コンパイル

WindowsならDebugまたはReleaseを選んで、Visual Studioのビルドコマンドを実行します。

Linuxならmakeコマンドを実行します。tweetという実行ファイルができあがります。アプリケーションの登録で指定したNameがmy_botなら、sudo cp tweet /usr/local/bin/tweet_my_botの様に、名前を変更してインストールするといいでしょう。

Qt Creatorがあるなら、twicpps.proを開いてビルドすることもできます。このプロジェクトファイル内に定義してある、インクルードやライブラリのパスを修正する必要があるかもしれません。

Windowsの場合、実行するには twicpps.exe の他に、OpenSSLのライブラリである libeay32.dll と ssleay32.dll が必要です。OpenSSLが正常にコンパイルできていれば openssl\out32dll の中にあるはずですので、その中から2つのDLLを探して twicpps.exe と同じ場所にコピーしてください。

使い方

ツイート

とりあえず実行

次のように実行するとツイートされます。

$ /usr/local/bin/tweet_my_bot Hello, world

エスケープ

上のような例では、たまたま成功しますが、空白を含める場合などには、できるだけダブルクォートかバックスラッシュでエスケープした方が良いでしょう。

$ /usr/local/bin/tweet_my_bot "Hello, world"

ハイフン

「-」はオプション指定のための特殊文字扱いとなります。「-」で始まるツイートを行いたい場合は、先に「--」を記述しておきます。それ以降は全ての文字がツイート文として解釈されます。

$ /usr/local/bin/tweet_my_bot -- -test-

標準入力

-stdinオプションを指定すると、標準入力からツイート文字列を得ます。

$ echo test|/usr/local/bin/tweet_my_bot -stdin

BASE64

ダブルクォートやバックスラッシュを使いたくない場合、BASE64でエンコードしてツイート文を渡すことができます。

$ /usr/local/bin/tweet_my_bot -base64 dGVzdAo=

-stdinと組み合わせて使うこともできます。

$ echo test|base64|/usr/local/bin/tweet_my_bot -base64 -stdin

メディア

-mediaオプションとファイルのパスを指定すると、画像を投稿することができます。このオプションは複数指定することができます。Twitterの制限により最大4個まで指定できます。動画GIFはひとつだけ指定できます。

$ /usr/local/bin/tweet_my_bot -media /home/user/neko.jpg "Hello, world"