LoginSignup
5
5

More than 5 years have passed since last update.

AWS Lambda つかって WakaTime Summary を Tweet する

Posted at

各エディタにプラグインをつっこむことでコーディング時間を計測してくれるサービス WakaTime この一ヶ月ぐらいつかってみてるんだけど統計でてくるのおもしろい。で、API もあるのでてきとうにまとめて tweet してみるテスト。あと、AWS Lambda が cron 的なことができるようになったとかなので、ついでにそれもテスト。

Python コードはこんなん。

lambda_function.py
# -*- coding: utf-8 -*-

import requests
import twitter

import config


def get_stats():
    headers = {'Authorization': 'Bearer ' + config.wakatime['access_token']}
    return requests.get('https://wakatime.com/api/v1/users/current/stats/last_7_days', headers=headers)


def tweet(status):
    api = twitter.Api(consumer_key=config.twitter['consumer_key'],
                      consumer_secret=config.twitter['consumer_secret'],
                      access_token_key=config.twitter['access_token_key'],
                      access_token_secret=config.twitter['access_token_secret'])
    # print api.VerifyCredentials()
    api.PostUpdate(status)


def make_summary(data):
    total = data['human_readable_total'].replace('hours', 'h').replace('minutes', 'm')
    lang_stats =  map(lambda l: '{} {}%'.format(l['name'], int(round(l['percent']))), data['languages'][0:4])
    return 'Last week\'s coding stats: Total {} ({}) (via @WakaTime https://wakatime.com/@Saqoosha)'.format(total, ' / '.join(lang_stats))


def lambda_handler(event, context):
    result = get_stats()
    print result.text
    summary = make_summary(result.json()['data'])
    tweet(summary)
    return summary


if __name__ == '__main__':
    # import json
    # with open('_exp/data.json') as f:
    #     data = json.load(f)
    #     summary = make_summary(data['data'])
    #     print summary
    lambda_handler(None, None)

AWS Lambda つかうといの注意点は 3rd party module を pip install python-twitter -t . とかって↑のコードとおなじとこにいれてまとめて ZIP でアップロードしないといけないてのと、cron のフォーマットがいつものやつとちょっと違うってぐらい。かんたん。サーバーレスでできるのらくちん。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5