Todo管理にはGoogle Tasksを使っている。家でも職場でもタスクを追加できて一元管理できるので便利なんだけど
CUIでもできたらもっと便利だろうとAPIを触ってみている。
家では普通にDeveloper's Guideの通りに動くんだが、職場のプロキシが超えられないので調べてみたらoauth2client.toolsのrunがダメらしい。
さらに追っかけてみるとflow.step2_exchange(code)のところの第二引数にproxyを設定したhttpを渡さないからこけていた。
run関数使わなければいいじゃんってことで書きなおした。ついでにFLAGも必要なくなった。
import httplib2
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow, FlowExchangeError
FLOW = OAuth2WebServerFlow(
client_id='####',
client_secret='####',
scope='https://www.googleapis.com/auth/tasks',
user_agent='gtask-client/1.0')
storage = Storage('tasks.dat')
credentials = storage.get()
if credentials is None or credentials.invalid == True:
authorize_url = FLOW.step1_get_authorize_url('oob')
print 'Go to the following link in your browser:'
print
print ' ' + authorize_url
print
code = None
code = raw_input('Enter verification code: ').strip()
try:
http = httplib2.Http(proxy_info = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, '####', 8080))
credential = FLOW.step2_exchange(code, http)
except FlowExchangeError, e:
sys.exit('Authentication has failed: %s' % e)
storage.put(credential)
credential.set_store(storage)
credentials = credential
http = httplib2.Http(proxy_info = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, '####', 8080))
http = credentials.authorize(http)
service = build(serviceName='tasks', version='v1', http=http,
developerKey='####')
tasklists = service.tasklists().list().execute()
for tasklist in tasklists['items']:
print tasklist['title']