Hipchatに入力した内容をAPIで取得してDay Oneにワンライナーで貼付ける
最近Day OneなるMac日記アプリを使っています。
普段は家でも外でもHipchatを使ってメモ取っているのですが、これを連携できないかなと思って調べてみました。
環境
- Mac Book Air
- OS X Mavericks (10.9.1)
やりたいこと
- Hipchatで入力した内容を1日単位で取り出してテキストデータにする
- 取り出したテキストデータをDay Oneに貼付ける
Hipchatからデータを取り出す方法
HipchatのAPIがありました。
TOKENを取得すれば、その後は、rooms/history APIでいけそうです。
最終的に、{room_id},{date},{token}の変数を確定させれば、レスポンスがjson形式で返ってきます。
https://api.hipchat.com/v1/rooms/history?room_id={room_id}&date={date}&timezone=JST&format=json&auth_token={token}
{"messages":[{"date":"2014-02-06T10:01:07+0900","from":{"name":"daxanya (-v-)","user_id":544xxx},"message":"https:\/\/github.com\/bowery\/orchestrate.js"},{"date":"2014-02-06T10:01:11+0900","from":{"name":"daxanya (-v-)","user_id":544xxx},"message":"orchestrate.js"},{"date":"2014-02-06T10:01:18+0900","from":{"name":"daxanya (-v-)","user_id":544xxx},"message":"http:\/\/www.slideshare.net\/who_you_me\/neo4j-24294061"},{"date":"2014-02-06T10:01:22+0900","from":{"name":"daxanya (-v-)","user_id":544xxx},"message":"\u30b0\u30e9\u30d5\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u300cNeo4j\u300d\u306e \u5c0e\u5165\u306e\u5c0e\u5165"}]}
ここまではよさそうです。
取り出したテキストデータをDay Oneに貼付ける
Day Oneに貼付けるための、Command Line Interfaceがありますので、これを利用します。
その前に、Hipchat APIからのレスポンスはjsonフォーマットなので、整形する必要があります。
jsonフォーマットからテキストへの整形
jqというコマンドラインでjsonを処理するツールが便利そうでしたので使ってみます。インストールはHomebrewから行いました。
さきほどのレスポンス結果は、example.jsonという名前で保存してあるとします。
$ cat example.json | jq '.messages[]'
とすると、
{
"message": "https://github.com/bowery/orchestrate.js",
"from": {
"user_id": 544xxx,
"name": "daxanya (-v-)"
},
"date": "2014-02-06T10:01:07+0900"
}
{
"message": "orchestrate.js",
"from": {
"user_id": 544xxx,
"name": "daxanya (-v-)"
},
"date": "2014-02-06T10:01:11+0900"
}
{
"message": "http://www.slideshare.net/who_you_me/neo4j-24294061",
"from": {
"user_id": 544xxx,
"name": "daxanya (-v-)"
},
"date": "2014-02-06T10:01:18+0900"
}
{
"message": "グラフデータベース「Neo4j」の 導入の導入",
"from": {
"user_id": 544xxx,
"name": "daxanya (-v-)"
},
"date": "2014-02-06T10:01:22+0900"
}
というように、messagesの配列の内容が構造化されて出力されます。
欲しいのは、dateとmessageなので、これらの値を抽出するように書き加えます。
$ cat example.json | jq '.messages[] | [.date, .message]'
[
"2014-02-06T10:01:07+0900",
"https://github.com/bowery/orchestrate.js"
]
[
"2014-02-06T10:01:11+0900",
"orchestrate.js"
]
[
"2014-02-06T10:01:18+0900",
"http://www.slideshare.net/who_you_me/neo4j-24294061"
]
[
"2014-02-06T10:01:22+0900",
"グラフデータベース「Neo4j」の 導入の導入"
]
これを一行にしたいですね。
$ cat example.json | jq '.messages[] | [.date, .message] | add'
"2014-02-06T10:01:07+0900https://github.com/bowery/orchestrate.js"
"2014-02-06T10:01:11+0900orchestrate.js"
"2014-02-06T10:01:18+0900http://www.slideshare.net/who_you_me/neo4j-24294061"
"2014-02-06T10:01:22+0900グラフデータベース「Neo4j」の 導入の導入"
お、やりました。と思ったけど、日付とメッセージの間にスペースが欲しいですね。配列の要素の間にスペースを入れてみましょう。
$ cat example.json | jq '.messages[] | [.date, ' ', .message] | add'
"2014-02-06T10:01:07+0900 https://github.com/bowery/orchestrate.js"
"2014-02-06T10:01:11+0900 orchestrate.js"
"2014-02-06T10:01:18+0900 http://www.slideshare.net/who_you_me/neo4j-24294061"
"2014-02-06T10:01:22+0900 グラフデータベース「Neo4j」の 導入の導入"
だいぶ整形されました。ただ、日付が冗長なフォーマットですね。一日単位で取得しているので、各行に日付は不要です。
ここから先はjqで加工の仕方がわからなかったのでsedに頼っています。
$ cat example.json | jq '.messages[] | [.date, " ", .message] | add' | sed -e "s/^\"[0-9-]\{10\}T//" | sed -e "s/^\([0-9:]\{8\}\)+0900/\1/" | sed s/\"$//
10:01:07 https://github.com/bowery/orchestrate.js
10:01:11 orchestrate.js
10:01:18 http://www.slideshare.net/who_you_me/neo4j-24294061
10:01:22 グラフデータベース「Neo4j」の 導入の導入
タイトルつける
Day OneはMarkdown方式で記述できるのと、一行目がタイトル扱いになるので、タイトルが同時に表示できるようにします。
タイトルに日付が入れたかったので、awkの引数(-v)で日付を変数として指定します。日付は自動的に前日になるようにしましょう。
パイプによるコマンド連結の途中で、先頭行にテキストを入れる方法がわからなかったので、awk使ってみました。区切り文字をタブにしているので変な区切られ方はしないかなと。
$ cat example.json | jq '.messages[] | [.date, " ", .message] | add' | sed -e "s/^\"[0-9-]\{10\}T//" | sed -e "s/^\([0-9:]\{8\}\)+0900/\1/" | sed s/\"$// | awk -v p=`date -v-1d +%Y-%m-%d` -F'\t' 'BEGIN{print "# hipchat-log",p} {print}'
# hipchat-log 2014-02-07
10:01:07 https://github.com/bowery/orchestrate.js
10:01:11 orchestrate.js
10:01:18 http://www.slideshare.net/who_you_me/neo4j-24294061
10:01:22 グラフデータベース「Neo4j」の 導入の導入
よさそうですね。
まとめ
APIによるデータ取得から最後まで、まとめてワンライナーするとこうなりました。{room_id}{token}は適宜入れ替えてください。
$ curl -s -X GET 'https://api.hipchat.com/v1/rooms/history?room_id={room_id}&date='`date -v-1d +%Y-%m-%d`'&timezone=JST&format=json&auth_token={token}' | jq '.messages[] | [.date, " ", .message] | add' | sed -e "s/^\"[0-9-]\{10\}T//" | sed -e "s/^\([0-9:]\{8\}\)+0900/\1/" | sed s/\"$// | awk -v p=`date -v-1d +%Y-%m-%d` -F'\t' 'BEGIN{print "# hipchat-log",p} {print}' | dayone new
最後の、dayone newの部分が、標準入力をDay Oneの新しい記事とするコマンドラインインターフェースになります。
上記コマンド一発で、Day Oneに日記が作成されます。Day One上ではこういう素敵画面になります。
それでは、充実したDay Oneライフを!
Author And Source
この問題について(Hipchatに入力した内容をAPIで取得してDay Oneにワンライナーで貼付ける), 我々は、より多くの情報をここで見つけました https://qiita.com/daxanya1/items/da15ce1853465e262ba8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .