Hipchat에 입력한 내용을 API로 취득하여 Day One에 원라이너로 붙여넣기
평상시는 집에서도 밖에서도 Hipchat 를 사용해 메모를 취하고 있습니다만, 이것을 제휴할 수 없을까라고 생각해 조사해 보았습니다.
환경
하고 싶은 일
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 방식으로 기술할 수 있는 것과, 1행째가 타이틀 취급이 되므로, 타이틀이 동시에 표시할 수 있도록 합니다.
제목에 날짜가 포함되고 싶었기 때문에 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 라이프를!
Reference
이 문제에 관하여(Hipchat에 입력한 내용을 API로 취득하여 Day One에 원라이너로 붙여넣기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/daxanya1/items/da15ce1853465e262ba8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)