先日、ギー沖住人の@hanachin_が#gokidea というハッシュタグでつぶやくと、それがギークハウス沖縄のPivotalTrackerのiceboxに追加されるスクリプトをRubyで書いてた。
require 'twitter' | |
require 'pivotal-tracker' | |
Twitter.configure do |c| | |
c.consumer_key = "your consumer key" | |
c.consumer_secret = "your consumer secret key" | |
c.oauth_token = "oauth token" | |
c.oauth_token_secret = "oauth token secret" | |
end | |
PivotalTracker::Client.token = "your pivotal tracker accesstoken" | |
project = PivotalTracker::Project.find(your_project_id) | |
gokidea = Twitter.search("#your_hash_tag", lang: "ja", rpp: 100).results.map(&:text).reject {|t| t =~ /^RT /} | |
icebox = project.stories.all.map(&:name) | |
(gokidea - icebox).each {|t| | |
project.stories.create(name: t, story_type: "feature") | |
} |
せっかくだし、AcceptされたStoryをギークハウス沖縄のbot(@geeokibot)につぶやかせたいなと思って、作成した。
#!/usr/bin/env python | |
# coding: utf-8 | |
import pivotal | |
import tweepy | |
from bs4 import BeautifulSoup | |
import datetime as d | |
from dateutil.parser import parse | |
import pytz | |
TOKEN = 'YOUR_TOKEN' | |
PROJECT_ID = 'PROJECT_ID' | |
pv = pivotal.Pivotal(TOKEN) | |
response, content = pv.projects(PROJECT_ID).stories(filter='state:accepted').get() | |
#get xml tags state accepted | |
soup = BeautifulSoup(content) | |
word = soup.findAll('name') | |
time = soup.findAll('accepted_at') | |
#pickup each name and accepted_at | |
times = [] | |
for i in time: | |
times.append(parse(i.string)) | |
words = [] | |
for i in word: | |
j = i.string | |
words.append(j.replace('#gokidea','')) | |
#TODO accepted_time compere to now time. | |
#get now time | |
now = d.datetime.now(pytz.timezone('Asia/Tokyo')) | |
tweet = [] | |
for i in zip(words,times): | |
n, t = i | |
if (now - t).total_seconds() <= 10 * 60: | |
tweet.append(n) | |
#tweet(accepted time and story name) | |
CONSUMER_KEY = "YOUR_CONSUMER_KEY" | |
CONSUMER_SECRET = "YOUR_SECRET_KEY | |
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN" | |
ACCESS_TOKEN_SECRET = "YOUR_ACCESS_TOKEN_SECRET" | |
auth = tweepy.OAuthHandler(CONSUMER_KEY,CONSUMER_SECRET) | |
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) | |
api = tweepy.API(auth_handler = auth) | |
for i in tweet: | |
api.update_status(i + u"を完了しました") |
参考資料
⇨PivotaltrackerのAPIの説明。ここにだいたい書いてある。基本的に、ユーザーアカウントがもってるTokenとプロジェクト単位で割り当てられるproject_id があればアクセスできるっぽい。
⇨これをimportしたら、xmlのタグが簡単に取れるみたい。似たようなものは他にもあったけど、うまくいかなかったけど。
⇨生まれて初めてパースというものに挑戦することになったので、これを使って抜き出した。簡単に抜き出せたのでびっくり。パースって面白いからもっと使いそう。
⇨使い方とか Beautiful SoupでHTMLやXMLをparseしよう - そこはかとなく書くよ。
⇨今回のプログラムは前回つぶやいてから、10分以内にAcceptedされたStoryを探してつぶやくために、現在時間とAcceptedされた時間を引く工程が必要だった。そのためにAcceptedされた時間をdatetimeに変換するものが必要だった。
⇨あと、ここだとタイムゾーンまで表示されるので、現在時刻を表示するときに、タイムゾーンを指定してあげなきゃいけない。そのときは、pytz - World Timezone Definitions for Python — pytz v2010e documentationでタイムゾーンを指定してあげる。
Groove Labo » Blog Archive » pytz – Pythonでタイムゾーンを扱うライブラリ
- zip関数の使用
⇨Story名とAcceptedの時間をひとつのグループにまとめるために使った。テキストでしか見たことなくて利点とかよく分からなかったけど、今回を通して便利だなと納得。
zip()関数 - バリケンのPython日記 - pythonグループ
- herokuでPythonのコードを動かす
⇨Python Dependencies via Pip | Heroku Dev Center
pip freeze
で出てきたインストールしてるモジュールとバージョンで、herokuに乗せるコードに必要なやつを requirement.txtに書くこと。