TwistOAuthでイカのレギュラーマッチの現在のステージをツイートする。

API初心者ですhttp://splapi.retrorocket.biz/こちらのサイトにあるデータを使… – Yahoo!知恵袋
APIってなんだろう…。Win32APIのことでしたらこちらの動画がチュートリアルとして最適です。
【プログラミング】テトリスを1時間強で作ってみた【実況解説】 – ニコニコ動画:GINZA

splapiが返却するのはただのJSONなので、Web APIどうこうはもはや関係ない気がしましたがどうなんでしょうか。
まずググりながら素のJSON操作→ほしい箇所だけechoするところから始めて、次にTwitterにテスト文字列をツイートして、そこまでできたら下のサンプル読んでみてほしいなぁ、と思いました。

PHPからツイートするのには以下のライブラリがとても便利でした。pharを1ファイルDLで済むのと、それと例外処理でかゆいところに手が届くのが素晴らしいです。(Twitter API自体例外発生時のエラーレスポンスめちゃくちゃなので)
mpyw/TwistOAuth: Advanced PHP Twitter library. (Launched branch v3.x and released stable 3.5.2)
普段Perl使ってるし、PHPはWordPress専用言語だと思ってるので、PHPからTwitter API使うことはもうなさそうですが、機会があればまた使ってみようと思います。(PHP自体使わなすぎてブログカテゴリすら存在しない)

実行マシンはRaspberry Pi2 Model B(OSはraspbian wheezy)を使いました。phpのバージョンは以下。

 xxx@raspberrypi ⮀ ~ ⮀ php -v
PHP 5.4.45-0+deb7u2 (cli) (built: Oct 27 2015 23:22:07)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

注意点として、実行時にPHP Fatal error: Call to undefined function curl_init() が出てしまう場合は、php5-curlをインストールする必要があることくらいでしょうか。
私の環境では上記エラー解消後すぐ動きました。

<?php
 
require_once 'TwistOAuth.phar';
 
define('CONSUMER_KEY', 'xxx');
define('CONSUMER_SECRET', 'xxx');
define('ACCESS_TOKEN', 'xxx');
define('ACCESS_TOKEN_SECRET', 'xxx');
 
// ツイート用オブジェクト作成
try {
    $to = new TwistOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
}
catch (TwistException $e) { 
    echo $e->getMessage() . "\n";
}
 
// JSON取得
$url = 'http://splapi.retrorocket.biz/regular/now';
$json = file_get_contents($url);
 
// 配列化
$array = json_decode($json,true);
$map_array = $array['result'][0]['maps'];
 
// ツイート用文字列作成
$tweet_string = '【現在のレギュラーマッチステージ】';
foreach( $map_array as $value ){
    $tweet_string = $tweet_string ."\n". $value;
}
echo $tweet_string; 
 
// ツイート
try {
    $to->post('statuses/update', ['status' => $tweet_string]);
} catch (TwistException $e) { 
    echo $e->getMessage() . "\n";
}
 
?>

知恵袋に回答してるカテゴリマスターさんが色んな意味で香ばしくてすごかったです。ある程度香ばしくないと起業とか経営ってできないのかもしれないですね。

twitterのリストに自分(非公開アカウント)を追加しようとすると403エラーが返ってくる。

他の人が作ったアプリでも同じ動きをしてるのでひょっとしたら対策されちゃったかもしれないですね。一過性かどうかわかんないのでとりあえずlistアプリは様子見させてください。

追記

がっつり修正入れてみたのですがlistsのapi自体がめちゃくちゃ不安定で使い物にならないので一旦公開停止しました。再開は未定です。
2016/4/13:動くようなので再開しました。自分自身はリストに追加できないようなので諦めました。

追記(2016/11/29)

非公開アカウントは自分をリストに追加できないけど、公開アカウントは自分のことリストに追加できるみたいですね。私は非公開アカウントしか持ってないのでアプリは直しません。

追記(2017/06/06)

account_settingsを呼んで鍵がかかってるか判定するようにアプリを修正しました。

upicoで日本語ファイル名の画像がアップロード出来ない不具合を修正しました。

表題そのままです。ファイル名にマルチバイト文字が入っていた場合自動的に”_”に変換されていたのですが、何かの拍子に変換されなくなったのでファイルオープンの時に問題が起こっていました。現在は解消しています。それにしても、日本語ファイル名でアップロードする方が結構多いことにびっくりしました。
ちなみにファイル名が何の拍子に変換されなくなったのかがよくわからないです。Mojoliciousをアップデートした時か何かだと思うのですが、頑張って追いかけようと思うほど気になりもしないし、ファイル名そのままで保存してくれたほうがこちらとしてはありがたいので、まぁいいやと思いました。

TimeLine Copierのバグを修正しました。

(問い合わせがちらほらあったのですが、ずっと原因不明だった)リストのメンバが1000人を超えると429エラーを返すバグを修正しました。

原因

リストに追加できてないメンバーがいないか確認する処理の中で、リストのメンバを取得する処理にcountを設定していなかったため、デフォルトの20人でリストの全メンバを取得しようとして、全員を取得する前に429エラーになっていました。

リストに追加できてないメンバーがいないか確認する処理自体は1年以上前から追加していたので、1年以上バグに気づいていなかったことになりますね。残念極まりないです。

Windows & ruby2.2.2でuserstreamを使ったお返事twitter botを作る。

環境

  • OSはWindows 8.1
  • ruby 2.2.2p95 (2015-04-13 revision 50295) [x64-mingw32]
  • twitter用のgemはsferik/twitter · GitHubのv5.14.0を使用する

なぜWindowsかというと、Windowsでrubyを使っている気になるあのコ向けに書いてるからです。(まあ多分見ないだろうけど。)
eventmachineと組み合わせると、気になるあのコが作りたがってる時報botもWindowsのイベントタイマを使わずに実装できるため、eventmachineの上で動いているtweetstream/tweetstream · GitHubを使用したいと思っていました。が、どう頑張ってもSSLフラグが有効の状態でeventmachineをインストールできなかったため(gem install時にwith-ssl-dirを指定してもさっぱり有効にならない)、em-twitterが動かず、Windowsのruby2.2.2でtweetstreamを動かすのは無理なんじゃないかと思っています(解決法を教えて欲しいレベルでわからないです)。

botの仕様

userstreamを監視して、自分宛てのメンションが来た場合にお返事します。
EM::PeriodicTimer.new(3600)と組み合わせて時報botとお返事botを合体させたかったのですが、うまく動いてくれなかったので今後の課題としたいです。
(私がeventmachineとsferik/twitterの仕様を理解してないからなのですが。)

実装

require 'twitter'

# Consumer key, Secretの設定
CONSUMER_KEY     = "xxx"
CONSUMER_SECRET  = "xxx"
# Access Token Key, Secretの設定
ACCESS_TOKEN_KEY = "xxx"
ACCESS_SECRET    = "xxx"

## Windowsの証明書の検証回避用設定
## 環境変数SSL_CERT_FILEを設定したくない場合下記のコメントアウトを外す
## 正攻法ではないのでおすすめしない。そもそもWindowsでRuby使うこと自体(ry
#OpenSSL::SSL.module_eval{ remove_const(:VERIFY_PEER) }
#OpenSSL::SSL.const_set( :VERIFY_PEER, OpenSSL::SSL::VERIFY_NONE )

client = Twitter::REST::Client.new do |config|
    config.consumer_key       = CONSUMER_KEY
    config.consumer_secret    = CONSUMER_SECRET
    config.access_token        = ACCESS_TOKEN_KEY
    config.access_token_secret = ACCESS_SECRET
end

stream_client = Twitter::Streaming::Client.new do |config|
    config.consumer_key        = CONSUMER_KEY
    config.consumer_secret     = CONSUMER_SECRET
    config.access_token        = ACCESS_TOKEN_KEY
    config.access_token_secret = ACCESS_SECRET
end

# userstreamを表示する
stream_client.user do |object|
    if object.is_a?(Twitter::Tweet)
        puts "#{object.user.screen_name}: #{object.text}"
        # 自分宛てのメンションがきた場合、挨拶を返す
        if object.in_reply_to_screen_name == "YOUR_SCREEN_NAME"
            client.update("@#{object.user.screen_name} リプライありがとう。", options = {in_reply_to_status_id:object.id})
        end
    end
end