The jonki

呼ばれて飛び出てじょじょじょじょーんき

Twitterのアイコンに動的な吹き出しをつけてみた

自分のTwitterアイコンを書き換えた記念に、吹き出しをつけたpngを用意してそこに動的にテキストを突っ込んでみました。そしてこの画像はTwitterプロフィール画像に反映されます。
f:id:jonki:20140504003149p:plain:w180:leftf:id:jonki:20140504003049p:plain:w180:left

実現方法

最終的にはどこかのサーバーで動かしつつ、面白い発話を半自動で取りたいと思いますが、今回はまず手動で動作を確認します。

  1. 発話させたいテキストの一覧を作る
  2. ImageMagick(後述)をPythonで動かして空の吹き出しに文字を入れてpng保存する。
  3. PythonTwitterライブラリ、TweepyでTwitterプロフィール画像を変更する。

ImageMagickのインストール

ImageMagickは画像を色々と操作するためのソフトウェアになります。私はMacですが、WindowsLinuxでも問題なく動きます。

Macではportで10分ほどかかって入りました。

sudo port install ImageMagick

試しにシェルスクリプトで試してみましたが、いい感じに動きます。色々とオプションをモリモリしていく感じですね。drawオプションのところではテキストラベルのXY座標と引数の文字をたべるようにしています。

#! /bin/sh
if [ $# -ne 1 ]; then
        echo "指定された引数は$#個です。" 1>&2
        exit 1
fi
convert jojonki-fukidashi.png \
        -font './setofont.ttf'\
        -pointsize 48\
        -fill black\
        -draw "text 88,115 '$1'"\
        output.png

ImageMagickシェルスクリプトは下記を参考に。

フォントは瀬戸フォントさんを使っています。

tweepyのインストール

Pythonの老舗Twitterライブラリです。今はpipで簡単に入るようですね。easy_installがない方は便利なのでこれを機に入れちゃいましょう。またWandというImageMagickPythonライブラリも入れましょう。

$ curl -O http://peak.telecommunity.com/dist/ez_setup.py
$ sudo python ez_setup.py
$ sudo easy_install pip
$ sudo pip install tweepy
$ pip install Wand

Twitterアプリケーションキーを取得する

Twitterのページからプロフィール画像を変更するアカウントでログインした状態でアプリを新規に作成しましょう。デフォルトだとAccess LevelがRead onlyになっているのでRead and writeに変えておいてください。またOAuthのためのコンスーマーとアクセスのキーとシークレット、計4つの文字列をコピーできるようにしておいてください。

ソースコード

まだ道通程度なのでソースコードがベタ書きで申し訳ないです。words.txtというのは初登場ですが、発話させたい文が行毎に書いてあるただのテキストファイルです。Wandの使い方に関しては公式に多く例が載っていますね。

Wand — Wand 0.3.7

今回は先程のシェルスクリプト相当のものをPythonで記述し、それをOAuthを通過したTwitterAPIクライアントを通してプロフィール画像を更新します。

# /usr/bin/python
# -*- coding: utf-8 -*-

import sys
import random
import tweepy

from wand.image import Image
from wand.drawing import Drawing
from wand.font import Font
from wand.display import display

CONSUMER_KEY = 'xxxxxx'
CONSUMER_SECRET = 'xxxxxx'
ACCESS_KEY = 'xxxxxx'
ACCESS_SECRET = 'xxxxxx'

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth_handler=auth, api_root='/1.1', secure=True)

ORIGIN_FILE_NAME = 'jojonki-fukidashi.png'
output_file_name = ''

with open('words.txt') as f:
    data = f.read()
    lines = data.split('\n')
    randWord = lines[random.randint(0, len(lines)-2)]
print randWord

with Drawing() as draw:
    with Image(filename='jojonki-fukidashi.png') as img:
        with img.clone() as i:
            draw.font = './setofont.ttf'
            draw.font_size = 32
            draw.text(138, 110, randWord)
            draw(i)
            output_file_name = randWord + '_' + ORIGIN_FILE_NAME
            i.save(filename=output_file_name)
            # display(i)
            api.update_profile_image(output_file_name)

最後に

吹き出しが思った以上に小さいので見にくかったり、自分で吹き出しの内容を用意していたり、更新がマニュアルだったりするのはイケてないので、近いうちにもう少し良い感じな仕組みに帰る予定です。

Ubuntu 12.04にvim7.4でLuaJitな環境を作る

DTIVPSを契約したので新しいvimの環境をUbuntu 12.04に入れます。デフォルトで入っていたのはVim 7.3だったので、イケてるプラグインを使うために最新のvimを自分で入れる必要があります。


といってもVim-jpさんのページに構築方法が書いてあります。./configureの前までは同じでした。

というのもconfigureするとluaが見つかってないとエラーが出てしまいました。

checking for luajit... no
checking if lua.h can be found in /usr/include... no
checking if lua.h can be found in /usr/include/lua... no
configure: error: could not configure lua


どうやらパスが通っていないだけのようなので、私の環境では下記のようにシンボリックリンクを張りました。

$ sudo ln -s /usr/include/lua /usr/include/luajit-2.0/ 
$ sudo ln -s /usr/bin/luajit-2.0.0-beta9 /usr/bin/luajit

UNIXにおけるLuaJIT対応 · Issue #348 · vim-jp/issues · GitHub


最後にこんな感じでビルドオプションをつけました。ここはお好みで。

$ ./configure \
  --prefix=/usr/local \
  --with-features=huge \
  --enable-multibyte \
  --enable-luainterp \
  --with-luajit \
  --enable-fail-if-missing 
$ make
$ sudo make install

Node.jsとexpress(ejs)

npm install -g expressでexpressコマンドのパスが普通に通らず何事かと思って公式ページ見ると、express-generatorとかいうコマンドかpackage.jsonでexpressのひな形を作ってますね。さらにnode app.jsで動くのかと思ったけど今はnpm startで動かすんですね。

追記

id:hecomi にnvmよりnodebewの方がナウいと指摘されたのでこちらに移行。

$ curl -L git.io/nodebrew | perl - setup
$ nodebrew ls-remote
$ nodebrew install-binary stable
$ nodebrew use v0.10.28
$ npm install express-generator -g
$ express -e myApp
$ cd myApp
$ npm install
$ npm start

nodebrewで手軽にnode.jsバージョンアップ&バージョン切り替え - Qiita



またnpmもnvm (node version manager)から入れたほうが管理が楽そうなイメージを持ちました。

$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
$ nvm install v0.10.28
        .nvm
->  v0.10.28
$ npm install -g express-generator
$ express --help
$ express -e myApp
$ cd myApp
$ npm start