IFTTTでSlackにYouTube動画を共有させる

IFTTTではYouTubeに関するトリガーはいくつかある.

f:id:cohalz:20180809222236p:plain:w480

その中で主に使うであろうトリガーは2つ.

  • 高評価を押すことでトリガーになるNew liked video
  • 指定した1つのチャンネルで新動画が出るのがトリガーになるNew public video from subscriptions

そのまま設定を続けて行けば連携は終わるが,気をつけることが一つある.

Slackの投稿オプションではMessageの欄にのみ入力することである.

下の例では{{Title}} {{Url}}を入力している.

それ以外の欄は空白にしないと展開されなくなることがあるので注意する必要がある.

f:id:cohalz:20180809222107p:plain:w480

上の設定に合わせると,こんな感じで再生やリンクが表示される.

f:id:cohalz:20180809224034p:plain:w480

ブログを独自ドメインにした

ドメインをRoute 53で買ったので変更してみた.

Registered domainsからドメインのName serversの欄にあるAdd or edit name serversを選び,作ったHosted Zoneに書かれているNSレコードに合わせるという部分に気づけず手間取ってしまった.

疎通確認はRoute 53側で用意してあるヘルスチェックを使うと簡単で,下のようにブログに使いたいドメイン(ここでは core.cohalz.co )がHealthyになったらはてなブログ側で設定が可能になる.

f:id:cohalz:20180805194737p:plain

独自ドメインの設定をしても更新後ドメインの設定状況: エラーと表示される場合は,一時間後ほどしてもう一度設定すると完了できる.

広告ブロッカーを乗り換えてみた

こんなツイートが流れてきた.

ずっとAdBlock(Plusではない)を使っていたけれど,特に理由もなかったのでuBlock Originに乗り換えてみた.

細かい速度は測っていないけれど,表示が少し早くなっているように感じた.

AdBlockとUIが違うので,その点慣れるのが難しいところもあるけれどしばらく使っていきたい.

chrome.google.com

英語ネイティブのVTuberという可能性

つい最近,夏実萌恵というバーチャルYouTuberが現れた.

名前は日本人だが英語ネイティブのキャラクターである.

www.youtube.com

動画を見てもらえるとわかるのだが,このキャラクターの動画の大きな特徴は「日本語と英語の字幕が同時に表示されること」である.

一切日本語を喋っていないのにもかかわらず,2つの字幕のおかげでするする見ることができてしまう.

さらに動画のコメント欄を見ると英語のコメントが多く,本来のターゲットにも届いている雰囲気を感じる.

よく考えてみると日本語を喋っている動画でも日本語字幕が付いていると楽だし,英語圏の人はこのキャラクターに対して同じように感じているのかもしれない.

そういえばつい最近こんな話題も見かけていた.

映画館でも,音声が英語で,字幕も英語,というのをやってくれたらよいと思う.

英語やってる - hitode909の日記

日本語字幕はプロの字幕なわけで、意味合いが遠くならないように翻訳されているはずで、見比べたいという気持ちもあり、上下に日本語と英語を並べたりしたい。

■ - hogashi.*

英語を知るという意味でもこれは面白い動画なんじゃないかと思った.

二ヶ国語の同時字幕という意味だとTEDを使ったものがあるけれど,気軽に見る題材としては少し重いかなぁという印象.

なので,こういうエンターテインメントの分野で出てくると見やすくていいと思ったし,需要はあると思う.

決意

someday... you gotta learn when to QUIT. and that day's TODAY.
Sans - Undertale

今,数年振りに下ではなく前を向けるようになった気がする.

案外不安も無いし,むしろこれからのことが楽しみでしょうがない.

恩以外にも返すべきものは沢山あるし,その先さらに与える側の人間になっていきたい.

そこまで自分のペースではどれくらいの時間が掛かるかわからないけれど,ここに決意表明することにする.

Vティーク買った

コンプティーク9月号増刊 Vティーク

コンプティーク9月号増刊 Vティーク

ENTUM,にじさんじ,シロ,ときのそらを始めとした人気のVTuberのインタビューが多数掲載されていて非常に良かった.

動画投稿が多いVTuberなんかは特に「どこに向かっているのか」とか「何を考えているのか」というのが本人の口から出てくることはあまりないので新鮮.

VTuberの数が増えてきて「存在は知っているけれど見たことない」という状態の人が多くなってきたけれど,ページとして見やすく魅力がまとまっていると短時間で知ることができて便利だと感じた. 動画だと短時間で魅力を知るというのは難しいし(生放送主体ならなおさら),雑誌媒体の利点を感じた.

好きなVTuberの事をもっと知りたい人や,新しいVTuberを知りたい人どちらにもおすすめできる雑誌だと思った.

Lambdaを使って特定サイトのはてなブックマーク総数と増加数をSlackに通知する

6/14にはてなブックマークのブクマ数取得APIが公開された. bookmark.hatenastaff.com

ブックマーク総数が取得できるということで,例えば「ブログのブクマ数が今日どのくらい増えたのか」を確認できると便利だと思い作ってみた. ブクマ総数前回の実行時からどのくらい増加したかを通知してくれる. f:id:cohalz:20180616163803p:plain

CloudWatch Eventsでeventにbookmark_urlslack_urlを渡すことを想定している.

import boto3
import os
import json
import urllib.request
import re

def lambda_handler(event, context):
    bookmark_url = event['bookmark_url']
    message = bookmark_url + ' のブックマーク総数: '
    total_count = get_total_count(bookmark_url)
    total = total_count['total_bookmarks']
    env_key = re.sub(r'^[^a-zA-Z]|[^a-zA-Z0-9\_]', '', bookmark_url)
    
    prev_tmp = os.getenv(env_key)
    if prev_tmp != None:
        prev_total = int(prev_tmp)
        message  += str(total) + '(' + get_delta_str(total, prev_total) + ')'
        if total != prev_total:
            update_variables(env_key, total, context.function_name)
    else:
        message += str(total)
        update_variables(env_key, total, context.function_name)
    
    print(message)
    post_to_slack(event['slack_url'], message)

    return total_count
    
def get_total_count(bookmark_url):
    params = urllib.parse.urlencode({'url': bookmark_url})
    api_url = 'http://api.b.st-hatena.com/entry.total_count?' + params
    
    with urllib.request.urlopen(api_url) as response:
        return json.loads(response.read().decode('utf-8'))

def update_variables(env_key, total, function_name):
    env = {}
    for key, value in os.environ.items():
        if key.startswith('http'):
            env[key] = value
    env[env_key] = str(total)

    client = boto3.client('lambda')

    return client.update_function_configuration(
        FunctionName=function_name,
        Environment={
            'Variables': env
        })

def post_to_slack(slack_url, text):
    json_data = json.dumps({'text': text}).encode('utf-8')
    request = urllib.request.Request(slack_url, data=json_data, method='POST')
    with urllib.request.urlopen(request) as response:
        return response.read().decode('utf-8')

def get_delta_str(x, y):
    delta = x - y
    if delta >= 0:
        return '+' + str(delta)
    else:
        return str(delta)

前回の状態をLambdaに記憶させるために,AWS SDK経由で環境変数に書き込む方法を取った. 環境変数を使うことで別のサービスに依存しない簡易的なKVSとして扱える.

ただし,環境変数に使える文字は限られているのでkeyを工夫する必要がある.

env_key = re.sub(r'^[^a-zA-Z]|[^a-zA-Z0-9\_]', '', bookmark_url)

docs.aws.amazon.com

また,環境変数の変更にはLambdaに対してlambda:UpdateFunctionConfigurationの権限追加が必要になる.

LambdaおよびCloudWatch Eventsで定期実行するためのCloudFormationテンプレートはこちらから. github.com