Tag: BOT’

ゴーストからTwitterに投稿する(其の参―中級編)

 - by Don

目次

準備

上級編を見てわかる通り、普通にやると準備が大変です。なので中級編では筆者が準備した環境を中継して投稿する方法を紹介します。

「概要」で説明した通り、以下のものが必要になります。

  • BOT用Twitterアカウント
  • Twitter APIの認証キー(2つ)※Twitter開発者登録は不要
    • ACCESS_TOKEN(アプリに対しアカウント毎に割り当てられる)
    • ACCESS_TOKEN_SECRET(アプリに対しアカウント毎に割り当てられる)
  • PHPが使用可能なサーバ(PHP7でなくても可)

BOT用TwitterアカウントとPHPが使用可能なサーバは例によって各自用意してください。

Twitter APIの認証キー(2つ)は以下のリンクから取得してきてください。

UKABOT

適当な名前のPHPファイルを作成してサーバにアップロードします。今回はsample.phpとしました。このファイルにコードを記述していきます。

<?php
define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$url = 'http://nikolat.starfree.jp/rentalbot/sendtweet.php';
$mes = 'サーバから送信テスト';
$post_data = array('access_token' => ACCESS_TOKEN, 'access_token_secret' => ACCESS_TOKEN_SECRET, 'status' => $mes);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
$res =  curl_exec($ch);
curl_close($ch); 

header('Content-Type: text/plain; charset=UTF-8');
print 'おしまい';

文字コードはUTF-8にしておきましょう。XXXの部分は自身が取得した2つのAPIの認証キーに書き換えてください。これを保存してWebブラウザからこのphpファイルがあるURLにアクセスしてみましょう。ブラウザには「おしまい」と表示され、BOTのアカウントに「サーバから送信テスト」と投稿されるはずです。

今はWebブラウザからアクセスしましたが、最終的にはSSPからアクセスし、メッセージを転送することを目標としています。

送信するテキストの部分を以下のように書き換えましょう。

<?php
define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$url = 'http://nikolat.starfree.jp/rentalbot/sendtweet.php';
$mes = $_POST['message'];
$post_data = array('access_token' => ACCESS_TOKEN, 'access_token_secret' => ACCESS_TOKEN_SECRET, 'status' => $mes);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
$res =  curl_exec($ch);
curl_close($ch); 

header('Content-Type: text/plain; charset=UTF-8');
print 'おしまい';

そしてSSPから以下のSakuraScriptを入力します。

\![execute,http-post,【URL】,--param=message=SSPから送信テスト]

【URL】は先ほどWebブラウザからアクセスしたphpファイルがあるURLに置き換えてください。BOTのアカウントに「SSPから送信テスト」と投稿されるはずです。

これでゴーストからTwitterに投稿することができました。

エラー処理

上記のコードは最小限の構成になっています。エラー処理くらいは加えたほうが良いでしょう。

<?php
header('Content-Type: text/plain; charset=UTF-8');

define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$url = 'http://nikolat.starfree.jp/rentalbot/sendtweet.php';
$key = 'message';
if (!isset($_POST[$key])) {
  print 'メッセージのパラメータ名が違います。';
  exit();
}
$mes = $_POST[$key];
$post_data = array('access_token' => ACCESS_TOKEN, 'access_token_secret' => ACCESS_TOKEN_SECRET, 'status' => $mes);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
$res =  curl_exec($ch);
if(curl_error($ch)) {
  print curl_error($ch);
} else {
  print $res;
}
curl_close($ch); 

ここで表示されるはずのメッセージはSakuraScriptを実行したゴーストのフォルダ内 ghost\master\var\sample.php に格納されています。

注意事項

ここで解説した方法は筆者のサーバを経由して投稿する方法になります。筆者がサーバの利用継続手続きを失念したり、筆者のTwitterアカウントが凍結されたりすれば動かなくなりますが、泣かないでください。

ゴーストからTwitterに投稿する(其の弐―上級編)

 - by Don

目次

準備

「概要」で説明した通り、以下のものが必要になります。

  • BOT用Twitterアカウント
  • Twitter APIの認証キー(4つ)※Twitter開発者登録が必要
    • CONSUMER_KEY(アプリ毎に割り当てられる)
    • CONSUMER_SECRET(アプリ毎に割り当てられる)
    • ACCESS_TOKEN(アプリに対しアカウント毎に割り当てられる)
    • ACCESS_TOKEN_SECRET(アプリに対しアカウント毎に割り当てられる)
  • PHP7が使用可能なサーバ
  • OAuthライブラリ(TwitterOAuth)

BOT用Twitterアカウントは各自用意してください。

Twitter APIの認証キー取得についても、Web上に解説記事がたくさんあるのでここで解説することはしません。筆者がざっと探してみた限りでは以下の記事がわかりやすいと思いました。BOTに投稿させるため、BOT自身のアカウントで登録した方が良いです。※Twitterアプリ開発経験者や複数BOT作成予定の人はこの限りではありません

PHP7が使用可能なサーバも各自用意してください。筆者は駄でべWikiを参考にスターサーバー(フリープラン)を利用しています。(PHPのバージョンをしっかり確認してください。PHP5ではダメです。)

最後にTwitterOAuthの入手ですが、ここでは最新版ではなくversion 1.1.0をこちらから入手します。

twitteroauth

理由は、最新版では依存モジュールがあって色々めんどくさいからです。動けばいい、の精神で古いバージョンを使用します。

展開したフォルダはtwitteroauthとリネームしてサーバにアップロードします。同一ディレクトリ内に適当な名前のPHPファイルを作成します。

directory-sample

今回はsample.phpとしました。このファイルにコードを記述していきます。

<?php
require 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

define('CONSUMER_KEY', 'XXXXXXXXXXXXXXXXXXXX');
define('CONSUMER_SECRET', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$mes = 'サーバから送信テスト';

$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);

$res = $twitter->post('statuses/update', array('status' => $mes));
print 'おしまい';

文字コードはUTF-8にしておきましょう。XXXの部分は自身が取得した4つのAPIの認証キーに書き換えてください。これを保存してWebブラウザからこのphpファイルがあるURLにアクセスしてみましょう。ブラウザには「おしまい」と表示され、BOTのアカウントに「サーバから送信テスト」と投稿されるはずです。

今はWebブラウザからアクセスしましたが、最終的にはSSPからアクセスし、メッセージを転送することを目標としています。

送信するテキストの部分を以下のように書き換えましょう。

<?php
require 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

define('CONSUMER_KEY', 'XXXXXXXXXXXXXXXXXXXX');
define('CONSUMER_SECRET', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$mes = $_POST['message'];

$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
 
$res = $twitter->post('statuses/update', array('status' => $mes));
print 'おしまい';

そしてSSPから以下のSakuraScriptを入力します。

\![execute,http-post,【URL】,--param=message=SSPから送信テスト]

【URL】は先ほどWebブラウザからアクセスしたphpファイルがあるURLに置き換えてください。BOTのアカウントに「SSPから送信テスト」と投稿されるはずです。

これでゴーストからTwitterに投稿することができました。

エラー処理

上記のコードは最小限の構成になっています。エラー処理くらいは加えたほうが良いでしょう。

<?php
require 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

define('CONSUMER_KEY', 'XXXXXXXXXXXXXXXXXXXX');
define('CONSUMER_SECRET', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$key = 'message';
if (!isset($_POST[$key])) {
  print 'メッセージのパラメータ名が違います。';
  exit();
}
$mes = $_POST[$key];

$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
 
$res = $twitter->post('statuses/update', array('status' => $mes));

if($twitter->getLastHttpCode() == 200) {
  print '投稿が完了しました。';
} else {
  print '投稿に失敗しました。';
}

ここで表示されるはずのメッセージはSakuraScriptを実行したゴーストのフォルダ内 ghost\master\var\sample.php に格納されています。

ゴーストからTwitterに投稿する(其の壱―概要)

 - by Don

本稿では伺かのゴーストからTwitterに投稿する方法について記述します。

ゴーストからのweb拍手送信を応用した内容となっています。
こちらを実践したことがある、または仕組みが理解できることを前提としています。

本稿は以下のように3部に分けて解説していきます。

「概要」では、大まかな仕組みと流れについて説明していきます。

「上級編」では、具体的に必要な準備や記述すべきコードを説明していきます。これが基本であり理想とされる対応となります。

「中級編」では、「上級編」で必要とされた準備のうちの一部を筆者が肩代わりすることで少しだけ敷居を下げた方法を説明していきます。本格的に対応する前に試用したい場合などにご利用ください。

ゴーストから自分の用意したサーバにメッセージを送信する

ゴーストからのweb拍手送信の動作原理を解説すると、SSPのSakuraScriptである\![execute,http-post]を使用してサーバにメッセージを送信し、サーバ側でメッセージを保存することでゴースト作者が閲覧できるようになっています。

send-webclap

ゴーストからTwitterへの投稿は、これの応用で、このサーバからTwitterにメッセージを転送することで実現します。

send-to-twitter

上級編

「上級編」では、PHP7を使用してTwitterにメッセージを転送するプログラムの記述を解説します。そのため以下のものを準備する必要があります。

  • BOT用Twitterアカウント
  • Twitter APIの認証キー(4つ)※Twitter開発者登録が必要
    • CONSUMER_KEY(アプリ毎に割り当てられる)
    • CONSUMER_SECRET(アプリ毎に割り当てられる)
    • ACCESS_TOKEN(アプリに対しアカウント毎に割り当てられる)
    • ACCESS_TOKEN_SECRET(アプリに対しアカウント毎に割り当てられる)
  • PHP7が使用可能なサーバ
  • OAuthライブラリ(TwitterOAuth)

※PHPとはWebプログラミングに使われるプログラミング言語の一つで、伺かで言えば「里々」みたいなものです。コピペで動くように解説するつもりなので必ずしもPHPに習熟する必要はありませんが、自分流にカスタマイズする場合はある程度習得することが望ましいです。なお、筆者はあまりPHPに詳しくありません。

中級編

「中級編」では、筆者のBOT用登録済みアプリを使って筆者サーバを経由して投稿する形式を取ります。そのため必要な準備は以下のものだけになります。

  • BOT用Twitterアカウント
  • Twitter APIの認証キー(2つ)※Twitter開発者登録は不要
    • ACCESS_TOKEN(アプリに対しアカウント毎に割り当てられる)
    • ACCESS_TOKEN_SECRET(アプリに対しアカウント毎に割り当てられる)
  • PHPが使用可能なサーバ(PHP7でなくても可)

forward-to-twitter

絵日記の終わり

 - by Don

びーふれんずの日記投稿機能はland.toサーバを経由していたのですが、今日Google App Engineの方に移植して引き上げてきました。それに伴い、移植が困難であると判断したため、デスクトップのスクリーンショットを投稿する「絵日記」機能を廃止しました。また、投稿先はTwitterはてなハイクの2箇所のみとなります。

land.toに置いていたBOTはこれで全部引き上げたはずです。今の場所もいつまで続くかわかりませんが、長く続くといいですね。

TwitterのBOTを引っ越した

 - by Don

land.toサーバのPHPで動かしていたTwitter BOT達(@mesoramen,@denpadokei)をここに移しました。

cloudControlにはcronを動かすオプションは探したけどないっぽいですね。今までFree Web Cron Serviceってところに頼ってましたがどうも重くて使いづらいので、Google App Engineのcronを使ってアクセスすることにしました。使えるツールを増やしておくと出来ることが増えて良いですね。