Yo APIを利用するためにAPI Keyを取得する

2周り遅れぐらいでYo APIを利用してみたので、API Keyを取得する際に行った作業のメモ。

Yoをインストールする

tokenの取得にはYoのアカウントが必要なので、iPhoneにYoをインストール。
ここで取得したアカウント名を利用してAPI経由でYoはできないので、その辺りのアカウント名は要注意。*1

トークンの取得

http://yoapi.justyo.co/ へアクセスすると、API Key取得するために必要な情報の入力を求められるので、入力します。

メールを確認する

先のフォームで入力したメールアドレス宛にAPI Keyがメールで送られてくるので確認します。*2
メールは以下の様な文面。

Yo,
Thanks for taking an interest in our API!
We created an API key for your username, (作成されたユーザ名).
Your unique API key is ******************************.
Please keep your key secret.
To learn more about how to use the API visit https://bit.ly/yoapi.
We're excited to see what you create! You can submit what you create
at the Yo API Services Directory - http://submit.justyo.co
Create a Yo button: http://button.justyo.co
Let us know if you have any issues.
Thanks,
Yo API Team
http://justyo.co

http://dev.justyo.co/login.html を開くことで、ダッシュボードからも確認できますね。

APIの呼出

フォローしている全員にYoをするのは、

$ curl --data "api_token=(取得したAPI Key)" http://api.justyo.co/yoall/

特定のユーザにYoするのは、

curl --data "api_token=(取得したAPI Key)&username=(Yoする先のアカウント)" http://api.justyo.co/yo/

の様にします。要はPOSTするだけですね。

Rubyで呼び出すのであれば、

require 'faraday'
conn = Faraday.new(:url => 'http://api.justyo.co') do |builder|
builder.request  :url_encoded
builder.adapter  :net_http
end
conn.post '/yoall/', {:api_token => YO_API_KEY}

といった具合にすればよさそう。

注意としては、APIの利用制限が1分間に1回だけなことくらいでしょうか。いろいろなトリガでYoさせて遊べそうです。

APIの使い方は以下のページでも紹介されています。
https://medium.com/@YoAppStatus/yo-developers-api-e7f2f0ec5c3c

*1:例えば、 APIを利用してhogeというアカウントからYoさせたいのにiPhoneアプリhogeというアカウントを取ってしまうと通知できません。

*2:API Keyがメールで飛んでくるのがアレな気もしますが...

Casto-cli 機能追加のお知らせ

Casto用のコマンドラインツールCasto-cliを公開していくつか変更が加わったのでご報告。

--browseオプションが付きました

以前の記事の段階では、Castoコマンドにファイル名を渡すことで自動的にURLを作成されるところまでがコマンドラインで行える様になっていたのですが@さんからpull-requestを頂いて --browse オプションが付きました。
このオプションを使うと、

$ casto /tmp/test.c --browse

といった具合で実行するだけでWeb上に作成されたCastoのページを自動的にブラウザが開いてくれます。便利!

ブログでも紹介していただきました。

--stdinオプションが付きました

今まではコードキャスティングする対象のファイルを指定する必要がありましたが、Castoコマンドに 標準出力をそのまま渡せる 様になりました。

例えば、Twというテキストベースのtwitterクライアントがありますが、これを利用すると、

$ tw --stream:filter=日本代表 | casto --stdin

などとすると、twitter上の日本代表に関するツイートのストリームをそのままCasto経由でキャスティングできます。*1


Githubのissueやブログコメント、twitterのメンション等で要望いただけたら対応できる範囲でゴニョゴニョやっていこうと思っているので、ご要望あれば是非お知らせください。

*1:そもそもtwitterの検索結果ページでいいじゃん。という話は横に置きます。

青い空

青い空。白い雲。

Castoのコマンドラインツールを作った

REMPチームで作ったCasto 用のコマンドラインツールを作りました。Castoについてはこちらを参照。

ツール自体はnpmで公開していますので、

$ npm install -g casto

でインストールできます。

npm : casto - Casto command line interface tool. casto casto このエントリーをはてなブックマークに追加

NPM

使い方としては、インストール後、

$ casto /tmp/foo.txt

で、引数で与えたファイル名をCasto経由でコードキャスティングできます。

百聞は一見に如かずということで、詳しくは以下の動画参照。是非ご利用ください。

Coffee scriptでstep.jsを使う (Hubotで3秒毎に発言させる)

Hubotに3秒おきに発言させるため setTimeout 使う時、あれこれ試してみて以下の様に書いてみた。step.jsを利用してコールバックのネストが深くならなくて多少見やすいかなと思ったのですが、もっと良い書き方があったら是非知りたい。

cronJob = require('cron').CronJob
step = require('step')
new cronJob('0 15 * * *', () ->
step(
() ->
robot.send {room:'sample'}, "3時です"
setTimeout @, 3000
return
() ->
robot.send {room:'sample'}, "お茶の時間です"
setTimeout @, 3000
return
() ->
robot.send {room:'sample'}, "休みましょう"
return
)
).start()

mackerelでLXC毎のCPU利用率を記録する

mackerelでユーザメトリックのグラフを作れるので、先日作ったlxc-cpu-usage
利用してホスト上で稼働しているコンテナのCPU利用率を表示させる様にしてみました。

mackerelでは、ユーザ定義のメトリックを送出するのには

# /etc/mackerel-agent/mackerel-agent.conf
[plugin.metrics.vmstat]
command = "ruby /path/to/vmstat-metrics.rb"
type = "metric"

といった内容を設定ファイルに追記する必要があって、
ここで [plugin.metrics.****] が項目名、command の部分が実際にメトリックを取得するコマンドになって、
Mackerelのドキュメントを参照すると、このコマンドの出力は以下のフォーマットで出力されることが期待されています。

{メトリック名}\t{メトリック値}\t{エポック時間}

ということで、lxc-cpu-usage のコマンドを拡張して以下の様な形でオプションを渡せる様にしました。*1

$ lxc-cpu-usage --name="remp001|storyboards001|castory001|mongo001|manage001" --metric
storyboards001  0.09    1401521140636
remp001 0.17    1401521140647
mongo001        0.53    1401521140652
castory001      0.02    1401521140659
manage001       0.12    1401521140669

--name のパラメータとして"|"区切りで複数のコンテナ名を渡せる様に対応して、 --metric でタブ区切りでコンテナ名, CPU利用率, エポック時が表示される様になっています。

これを利用して、Mackerelの設定ファイルを以下の様に追記します。

# /etc/mackerel-agent/mackerel-agent.conf
[plugin.metrics.lxc]
command = "lxc-cpu-usage --name='remp001|storyboards001|manage001|castory001|mongo001' --metric"
type = "metric"

Mackerel agentをRestart

$ sudo /etc/init.d/mackerel-agent restart
* Restarting  mackerel-agent
...done.

しばらくするとMackerel上で各コンテナのCPU利用率が確認できる様になります。

とてもあっさりと任意のメトリックが追加できて便利。

lxc-cpu-usageというツールを作った

VPSの上で複数のLXCを作ってRubyやnode.jsのアプリケーションサーバを動かしたり、DBサーバを動かしたりしているのですが、
稀に「このコンテナでどのくらいCPUが利用されているのだろう?」*1と調べることがあって、その時には

  1. 該当のLXCのinitプロセスを見つける
  2. そこにぶら下がっているプロセスを確認
  3. それらのプロセスがどのくらいCPUを使っているか知る

といったことをやっていたので、その辺りをさっくりできるツールを作ってみました。nodeで作ってます。初npm登録。

lxc-cpu-usage lxc-cpu-usage lxc-cpu-usage このエントリーをはてなブックマークに追加

$ npm install -g lxc-cpu-usage でLXCが稼働しているホストにインストール。

その上でコンテナ名を引数で渡してやるとそのコンテナで動いているプロセスを列挙してCPU利用率を取得してくれます。

例えば、manage001というコンテナが稼働しているのであれば

$ lxc-cpu-usage -n manage001 -v
lxc-cpu-usage - Target LXC:manage001, Target PID:9844
------------------
PID     %CPU
10002    0.01
21669    0.03
(snip)
23340    0.06
23349    0.00
------------------
Processes: 16, CPU usage: 0.16

といった具合で指定したコンテナ内で稼働しているプロセスの一覧とその合計を得ることができます。

誰得感ありますが、コンテナの稼働率見ると、動いているアプリケーションの働いている感を感じられて幸せになれます。

参照

*1:深い意味は無くて、本当に興味でみることが大半...

Hubotを定期的に動かして発言させる

Hubotでcronでスクリプトを定期的に実行させる様に定期的に動かして例えばサービスのパラメータ等を通知させるのはどうするとよいのか調べたのでその際のメモ。

node-cronというnpmパッケージがあるので、これを利用するとcronと同じ書式でスケジューリングすることができます。

以下、REMPチームで利用しているHubotを毎時0分に利用状況を通知させる様にした際の例(を少し変えたもの)です。

cronJob = require('cron').CronJob
module.exports = (robot) ->
new cronJob('0 * * * *', () ->
http = robot.http('http://remp001/****').get()
http (err, res, body) ->
if(!err)
json = JSON.parse body
robot.send {room:'remp'}, "再生回数: #{json.today_play_count}"
robot.send {room:'remp'}, "検索回数: #{json.today_search_count}"
).start()

流れとしてはソースコードそのままですが

  1. node-cronで毎時0分に稼働させるジョブを作成
  2. REMP に用意しているサービスステータス取得のAPIへGETリクエスト
  3. JSONが返ってくるのでparseする
  4. Hubotに指定したチャットルームにそのパラメータを喋らせる

これだけ。

こうするとで定期的にHubotを動かしてチャットルームにREMPの利用状況を1時間毎に通知できる様になりました。いままで、こういった通知をちょっとしたスクリプトを書いてcronに登録して通知させたりしていたのですが徐々にHubotに寄せて行こうと思います。

併せて読みたい

hideack/remp_hubot · GitHub hideack/remp_hubot · GitHub hideack/remp_hubot · GitHub このエントリーをはてなブックマークに追加

焼鯖定食。