AWS Lambdaで任意のURLからファイルダウンロードしてS3に格納する

PythonAWSの勉強がてら、タイトル通りのスクリプトを書いてみた。

IAMの画面から AmazonS3FullAccess のポリシーをアタッチしたロールを作ってやって、Lamdaファンクションに指定してやれば動く。

使い方

下記3つを実行時のPayloadにJSONで指定して実行する。

  • bucket_name 格納先バケット名。存在しないバケットが指定された場合は、バケットをap-northeast-1に作成する。
  • url ダウンロード対象のURL
  • file_name 格納ファイル名

コード

import pycurl
import urllib
import boto3
from io import BytesIO

def lambda_handler(event, context):
    location = 'ap-northeast-1'
    s3client = boto3.client('s3')
    buckets = s3client.list_buckets()
    bucket_name = event["bucket_name"]
    if bucket_name not in buckets:
        bucket = s3client.create_bucket(Bucket=bucket_name,  CreateBucketConfiguration={
    'LocationConstraint': location})
    buffer = BytesIO()
    c = pycurl.Curl()
    c.setopt(pycurl.URL, str(event["url"]))
    c.setopt(pycurl.WRITEFUNCTION, buffer.write)
    c.perform()
    c.close()
    s3client.upload_fileobj(BytesIO(buffer.getvalue()), bucket_name, event["file_name"])

実行時のPayload例

{
  "url":"http://www.google.com/",
  "bucket_name":"mytestbucket",
  "file_name":"google.html"
}

留意点

  • ダウンロードしたデータをメモリに展開するので、大きなファイルのDLは出来ない。
  • もっとおしゃれな書き方は無いものか。

GeekBuyingで買ったGPD Winのライセンス認証が何とかなった

 話題になってるところでは話題のGPD Winですが、この度GeekBuyingにて注文していた機体がようやく到着しました。

 

初めは外観上の問題もなかったので安心してましたがそこは中華クオリティーということで、お約束の不具合がありました。

f:id:tomo-ono:20161208010728p:image

はい、Windowsのアクティベートが出来ません。噂には聞いていたので「当たったかー」ぐらいの感じ。

 

 ともかくGeekBuyingのアフターセールサポート窓口(support_aftersale@geekbuying.com)に、上記のSSを添えて下記のようなメールをしました。

Dear customer service representative,

I've bought GPD Win from GeekBuying.
The order number is #xxxxxxx.

I'm having problem regarding to activation of Windows 10.

I've inputted the Win 10 key which is printed on the silver sticker on the keyboard.
However, Windows couldn't activate with this key.

The error message I got is on the attached screen shot.

Could you send me another key that can activate my Windows?

中学生レベルの英語だ.... 

ともあれ上記で通じたようで、1日ぐらいで新しいシリアルをメールしてくれました。向こうでも認識済みの問題なのでしょうね。

新しいシリアルでは認証もすんなりと通りました。

 

初期不良も落ち着いたところで、ガンガン使い込んでいこうと思います。

f:id:tomo-ono:20161208010544j:image

布団乾燥機を買いました。

  • 冬に布団に入った時の寒さがどうにも辛い
  • 住居環境的な問題で布団が干せない

という問題があり、前々から布団乾燥機を買おうとは思っていたのですが、イマイチピンとくる商品が無いので先送りになっていたところ、

ういにゃんさんの、【2016年】ことし買ってよかったもの 13選【フリーランス編】 にて "日立 布団乾燥機 アッとドライ" が紹介されており、なかなか良さそうだったのでAmazonでポチった。

使ってみた

布団乾燥機の吹き出し口は足元の方にあるので、足元が多少暖かくなる程度かなと思っていたのですが、潜り込んだ瞬間に思わず声を上げるほどの暖かさ。 布団の中全体がホカホカになっている。 これはあれだ。コタツだ。 コタツで寝ると足の方に血栓ができやすくなり、最悪死ぬ場合もあるというからコタツで寝ることは全く推奨されないのに対して、こちらは布団なのだからむしろ寝ることが推奨されるのだ。何たる僥倖。

布団自体の性能も乾燥により回復したようで、朝の暖かさも一味違う状態になっており最高。

また、こいつはシートとかを布団内で広げる必要がなく、写真のようなノズルを掛け布団と敷布団の間に置くだけなので超絶お手軽。ズボラな私でも毎晩利用できる。 f:id:tomo-ono:20161206002426j:plain

ホース、ノズルをまるっと本体にしまえるのもポイントが高い。

というわけで本日も布団で無限に練をしまつ。

Google Apps Scriptで映画生活が充実した話。

事の起こり

TOHOシネマズの予約、アプリが良くなってきたが発券のUXが微妙だよねって話。

  • 発券に4桁の番号が必要
  • 4桁の番号はメールに書いてあるが、埋もれていて読みにくい
  • そもそも発券時にメール引っ張りだすのも面倒

なので「Googleがメール読んでスケジュールに登録してくれ」るやつ作った。

得られた体験

  • スケジュールの通知機能をOnにしておけば、発券するタイミングで通知が来ているのでメール開く必要もないはず。

仕組み

  1. Google Apps Scriptが定期的にGmailAPIをよんで、TOHO予約のメールを検索
  2. 検索されたTOHOシネマズの予約メールを、さいきょうの正規表現でパース
  3. まだ予定として登録されていないなら、GoogleCalendarに登録する

正規表現使いたくない。。。なんとかならんかしら。。。。

使い方

  1. https://script.google.com/ を開く。
  2. "コード.gs"の中をこのスクリプトで置き換えて、適当な名前をつけて保存。
  3. メニューから[リソース]-[現在のプロジェクトのトリガー]を選択。
  4. "トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。"をクリックしてトリガを設定。
  5. 実行: createTohoEventFromGmail
  6. イベント: 時間主導型 分タイマー 10分ごと
  7. 保存をクリック。
  8. 承認が必要と言われるので承認する。
  9. 以降10分毎に処理が動いて、過去分も含めてデフォルトカレンダーに予定追加される。

感想

  • 正規表現のところを書き換えれば、いろいろな映画館に応用できそう。
  • Spreadsheetに書き込むようにして、映画視聴記録作るとかもできそう。
  • Google Apps Scriptは強すぎる。