SlackでNHK『おはよう日本』キャスターの和久田アナ専用チャンネル作った

via GIFMAGAZINE

なぜ作った?

今の自分にとって一番必要なのは癒しだから


機能

  • インスタグラムで和久田アナのハッシュタグがついた画像を取得して #wakuda に流す
  • Google Custom Search APIで取得した和久田アナの画像を一時間に一度 #wakuda に流す
  • "img" "imgplz" などと発言するとGoogle Custom Search APIで取得した和久田アナの画像を #wakuda に流す

以下順序立てて説明


インスタの画像取得について

Zapierを利用、ザピエルと読むらしい。ZapierはIFTTTやmyThingsと同様に簡単にWebサービス同志を連携できるもの。今回はこのやり方を真似させて貰った
ZapierでSlackを佐野ひなこちゃんで埋め尽くす #apijp - @i2key のBlog
きっとPythonやなんかで自力で出来ないこともないだろうけど、簡単に出来るものがあるのならばそれを利用する。但しあまり更新されないし、人任せなところもあるのであまり期待せずに画像が流れてくるのを待っているところ


AWS Lambda Pythonを使った画像の定期投稿

Google Custom Search API、AWS Lambda Python、SlackのIncomingWebhooksを利用。流れ的には、先ずGoogle Custom Search APIを使い、画像URLをS3に保存。そしてスケジュールイベントでAWS Lambdaを起動させ、ランダムチョイスでひとつ画像URLを選択してSlackのIncomingWebhooks経由で投稿する。PythonでSlackのIncomingWebhooks(SlackのAPIと言えばいいのか)を操作するのに今回使用したのはslackwebというライブラリでこれがすごく簡単に投稿してくれる

Python 2.7.13 (default, Jan 31 2017, 21:53:31)
Type "copyright", "credits" or "license" for more information.

IPython 5.4.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import slackweb

In [2]: slack = slackweb.Slack(url='https://hooks.slack.com/services/*****************')

In [3]: slack.notify(text="test")
Out[3]: u'ok'

Amazon API Gatewayを使ったbot的な画像投稿

Google Custom Search API、AWS Lambda Python、Amazon API Gateway、SlackのOutgoing Webhooksを利用。 定期投稿の場合はslackwebを使ったのだけど、Amazon API Gateway + Outgoing Webhooksの場合はAWS Lambdaでjsonなレスポンスを返してあげればSlackに投稿される。流れ的にはSlackの該当チャンネル上で任意の言葉を発言すると、Outgoing WebhooksがAmazon API GatewayのWebAPIを叩き、AWS Lambdaが起動する。AWS LambdaがS3にあるURLからランダムチョイスで選択しSlackに返信される。

以下適当なコード

from __future__ import print_function, unicode_literals
import random
from random import SystemRandom
from string import ascii_lowercase, digits
import boto3
from settings import config as cfg


def _random(farm):
    return random.choice(farm)


def _create_anchor(image):
    return image + '#' +  ''.join(SystemRandom().choice(digits+ascii_lowercase) for i in xrange(20))


def get_image_list(bucket, key):
    s3 = boto3.resource('s3')
    bucket = s3.Bucket(bucket)
    obj = bucket.Object(key)
    obj = obj.get()
    body = obj['Body'].read()
    return (body.decode('utf-8').split(','))


def lambda_handler(event, context):
    if not event['token'] == cfg['SLACK_TOKEN']:
        return ""
    msg = _create_anchor(_random(get_image_list(cfg['BUCKET'], cfg['KEY'])))
    payload = {"text": msg}

    return payload

Amazon API Gateway の APIキー認証

今回一番悩んで嵌った箇所がこれ(というか多分今もわかってないかも)。 API GatewayでAPIキー認証を行う場合APIキーはリクエストヘッダにキーを含める必要がある。 SlackからOutgoing Webhooks経由でAPI Gatewayを叩く際、キー認証を行うにはOutgoing Webhooksからのリクエストヘッダにキーを含めなくてはならない(?) それは出来そうにないのでOutgoing Webhooks経由ではAPI キー認証は出来ないということでいいのだろうか。なので現在はAPI GatewayのセキュリティはOpenにしてそのかわりOutgoing Webhooksに含まれるトークンをLambdaで受け取って認証している(トークンの認証に失敗すれはLambdaはなにもしないで終了)


画像取得について

Google Custom Search APIによる画像取得は現在1回/日しか実行していない。というのは毎回画像取得のLambdaを実行させても結果はあまり変わらない為。 また件数も50件しか取得していない。これは取得する件数を増やすと和久田ファン的に納得できないノイジーな画像が増えてくる為で仕方が無く50件におさえているのが実情。 投稿される画像はいつも似たような画像が多くなるのでそれも新鮮味が欠けてくるので悩ましいところ。


画像重複問題

Slackは1時間以内に同じURLを投げつけると警告を出してプレビューしてくれない模様

スクリーンショット 2017-07-19 21.09.18

和久田ファンとしては非常にゆゆしき問題なので、問題を回避すべく色々考えた結果、ランダムな文字列のアンカーをくっつけることにした

def _create_anchor(url):
       return url + '#' +  ''.join(SystemRandom().choice(digits+ascii_lowercase) for i in xrange(20))

画像URLを引数に取ることによってランダム文字列のアンカー付きのURLが返される。Slack側には違うURLと認識されるが、プレビュー時にはアンカーは無視されて正しい画像が展開される。一応これでうまくいっている。

その他

とりあえず一個前のブログ記事にもあるように、システムエンジニア職を辞めてしまい新しいことをやっているのだけど、思ってた以上に激流で日々ラフティングをやっているような気分。毎日ヘロヘロになっているのでこれさえあれば頑張れると思って残っている力を振り絞って作った。後悔はしていない。

以上です


いざ財務会計の世界へ

すべての写真-1031

職種転換します

約13年間、社内SEとして働いてきましたが、7月より財務会計の世界に飛び込みます(転職じゃなくて異動)。

といっても新卒で入社した会社では経理部に配属され予算管理や債権・与信管理等を足掛け8年以上やってきたので(多少の畑違いな所はありますが)環境的には実質出戻りとなります。

なんでSE辞めるの?って言われれば、ただ単にお上に経理やらない?って打診を受けたので承諾した(サラリーマンにとって打診は命令だろ?)ってことなのですが、実際には少なくとも2日程は悩みました。悩んだのですが結局職種転換を決めた理由の一つに昔からの自分ならではの決め事が関係しています。

それは、2つの事柄をはかりにかけた場合、もしくは本当にこいつで良いのかな?って悩んだ時、好きなものではなくて合っている(合ってそうな)ものを選択するとうまくいくことが多いということです。

勿論全ての事象がこの限りではないですが、小さなことで言えば服装も髪型もそうだし、転機で言えば3社から同時に内定を貰った転職も自分がしたいもの好きなもの興味があるものを尊重しつつも専門家や信頼のおける人の意見を聞き、どちらが自分に合ってそうなのかを考え選択したほうが上手くいったような気がします。

結局、私は自分のことを良く知っているようで結局何も知らないということです

経理の仕事は新卒の時に人事が適正を鑑みて配属されキャリアを積んだもの。SEは自分がやりたくて立候補して半分以上独学でキャリアを積んできたもの。この場合、自分にとってエンジニアは好きな仕事、経理は合っている仕事ということですね、どちらの仕事がより自信を持って相手にお金を請求することができるかを想像した時、きっと経理の仕事だろうなって思ったからです。

勿論『好きこそものの上手なれ』も否定しません。

私から業務を引き継ぐ後輩君へ

(このブログは見ていないと思うけど)君も提案型営業マンから社内SEへの配置転換となってさぞかし驚いたでしょう。振り回しちゃったようで申し訳ない。色々思うところはあると思うけど、適正に関して言えば何も問題ないですよ。

ことプログラミングに関して言えば、不具合箇所のあたりをつけるところや、機能追加の実装アイデアなんかはプログラミング開始ほんの数週間とは思えないくらいの非凡なセンスだと思います。久しぶりに会社で地頭が違う人に出会いました(笑)

但し今後は(スマートに出来ることはわかった上で)若いんだから失敗を恐れず全社ネットワーク止めちゃうくらいもっと腕白にトライしてほしいかな。

なんでもやってみればいい。きっとその失敗が糧になるでしょう。

そういえば、後先考えずチェレンジせよというメッセージを込めた曲が最近リリースされました。赤い公園のjourneyという曲です。

勝手にやめるな青春のjourney
死ぬまでヤングでいようぜbrother
お前の残した足跡が答えになる

名曲誕生の予感がするので是非聴いてみるといいですよ。

journey(初回限定盤)(DVD付)
赤い公園
ユニバーサル ミュージック (2017-06-21)
売り上げランキング: 510

Shizuoka.pyのメンバーの皆様へ

仕事の内容は変わりますが、今後Pythonを書けない、書かないとは一言も言っておりませんw。寧ろ仕事でプログラムに触れない分書きたくなるでしょう。また皆で集まって知見、経験を共有できる日を楽しみにしております。

ではでは


タナゴ釣りの道具購入

すべての写真-1165

先日会社帰りにイシグロ中吉田店に寄り、店員さん捕まえてタナゴ釣りの道具一式揃えたいんだけど云々言って適当に見繕ってもらった。

本当はタナゴ桶(注:リンク先は画像検索)とか欲しいけどこの釣りは凝りだしたら本当にきりがないし、まずは最低限のもので。実は振替休日である今日行くために慌てて揃えたのだけど諸事情で断念。7〜8月は仕事で無理そうだし、行けるとしたら9月以降かな。うーん恋しい


父の日

ここ数年、父の日に必ず観ている動画がある

Crisis brewing as Japan's tea farmers face radiation ban - CNN.com

この動画(を含めた記事)はCNNが制作したもので、2011年3月11日の東北地方太平洋沖地震を端緒に発生した福島第一原子力発電所事故に起因する放射性物質の影響が、遠く離れた静岡市の緑茶にも影響が出て、生産者や緑茶業界に暗い影を落としているというレポートである。レポートの内容は素晴らしいものだと思うが、自分にとってはそこが重要で観ているのでない。では何か。それは父親がインタビューされているのである(20秒くらいから登場。尚、最新のChromeだとFlashを有効にしないと観れない デスクトップブラウザでFlash Playerを有効にする方法まとめ - Qiita)。

父親は2012年に他界している。父の写真は何枚もあり、父のことを思い出さないことはないが、ビデオを撮る習慣がなかった為か、父が写っている動画、ビデオの類は全く無い。勿論、喋っている姿、声などは思い出せないことはないが、実際の動画を観るとおおっと思うところがある。

年に一度この動画を観て父親の喋り方、仕草、表情を思い出している。ありがたいことに6年も経過しているのにまだ記事にアクセスが出来る。アーカイブの重要性をしっかりと理解しているからだろう。出来れば日本の報道機関も見らなって欲しいものだけど。


タナゴ釣り

すべての写真-1138

先週の日曜日にタナゴ釣りに行ってきた。会社の先輩でタナゴ釣りにハマっている人がいて、その人のインスタやFaceBookにアップロードされている魚体に惹かれて同行して指南してもらうことにした。

3時間で10匹弱釣れたので初めてにしてはまあまあじゃないかと思う。コツは餌(グルテン)の付け方>>>棚のとり方>合わせ の順かと。とにかく餌の付け方に釣果は左右されるような印象を受けた。


すべての写真-1129

タナゴは絶滅危惧種であり、釣り場、ポイント等はおおっぴらにしないようにするが、良いポイントが近所にあるのは幸運だったと思う。またタナゴの聖地は浜松にあるようなので機会があったら是非行ってみたい。


PAGE TOP