特定のツイートをTumblrに引用postするためのPythonスクリプト

作ったもの

github.com

mangatime-kirara.tumblr.com

説明

指定した Twitter アカウントの画像ツイートを Tumblr に引用 post するためのスクリプト。前回の実行よりも新しいツイートのみを対象とするために、既にふぁぼっていたら処理を終了するようなコードになっている。

画像を含むのに API で取得できないツイートが一部存在するけど謎。

Tumblrのユーザーを推薦するツールを作った

Tumblr は画期的な SNS だけど、良質なブログを見つけ出すのはなかなか難しい。そこで今回は、自分と趣向が似ているユーザーを探すプログラムを書いた。

ソース

github.com

説明

自分の Like した post からユーザーを取得し、頻度順に並べる。それなりに Like していればいい結果が出てくるはず(自分で実行したらまあまあだった)。

前に Flask の記事を書いたときに思い浮かんだことだったから最初は Web サービスにしようかと思ってたけど、ユーザーの抽出のところでスクレイピングすることになったからやめた。Tumblr API はけっこう貧弱でつらい。

Tumblpy (PythonのTumblrモジュール) で複数の画像を投稿する

サンプルコードが無かったので。

paramsのdata keyのところに画像のファイルオブジェクトのリストを渡すだけ。

Sample

Python 3 で実行

from tumblpy import Tumblpy


def main():
    BLOG_URL = "metyashiko.tumblr.com"
    consumer_key = ""
    consumer_secret = ""
    token = ""
    token_secret = ""

    t = Tumblpy(consumer_key, consumer_secret, token, token_secret)

    params = {
        "type": "photo",
        "caption": "TEST",
        "tags": "Tag1, Tag2",
    }

    images = ["image1.jpg", "image2.jpg"]
    for i, image in enumerate(images):
        params["data[{}]".format(i)] = open(image, "rb")

    post = t.post('post', blog_url=BLOG_URL, params=params)


if __name__ == '__main__':
    main()

Python + FlaskでTumblrのOAuth認証まで

ライブラリを使うだけの話です。

続きを読む

Pythonでフォントを指定して数字の画像ファイルを生成する

Python3とPILが必要(Anacondaを使うと勝手に入ってて便利ですね)。

フォントのディレクトリや画像サイズを適宜変えるとよさそう。

"""
フォントを指定して数字の文字画像を生成する(黒背景白文字)
"""
import os
import re
from PIL import Image, ImageDraw, ImageFont
 
SIZE = W, H = 28, 28
 
 
def num_to_english(x):
    """ 数字の英語文字列を返す """
    assert 0 <= x <= 9, "Input int x (0 <= x <= 9)"
    return ("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE")[x]
 
 
def make_image(idx, font_name):
    """ フォントを指定して 0-9 の画像ファイルを作る """
    fnt = ImageFont.truetype("C:/Windows/Fonts/{}".format(font_name), 25)
    for i in range(10):
        back_image = Image.new("RGBA", SIZE, (255, 255, 255, 0))
        txt_image = Image.new('RGBA', SIZE, (0, 0, 0, 255))
        draw = ImageDraw.Draw(txt_image)
 
        tw, th = fnt.getsize(str(i))  # フォントを指定した時のサイズ(位置計算に使用)
        draw.text(((W - tw) / 2, (H - th) / 2), str(i), font=fnt, fill=(255, 255, 255, 255))
        file_name = "{}_{}.png".format(num_to_english(i), idx)
        out = Image.alpha_composite(back_image, txt_image)
        out.save("images/" + file_name)
 
 
def main():
    # ttfファイルのみ取得する
    rp = re.compile(".*ttf")
    font_list = [fnt for fnt in os.listdir("C:/Windows/Fonts") if rp.match(fnt)]
 
    for idx, font_name in enumerate(font_list):
        make_image(idx, font_name)
 
 
if __name__ == '__main__':
    main()

0-9の数字画像がたくさん得られます。

結果の一部

f:id:fushime2:20170113193620p:plainf:id:fushime2:20170113193628p:plainf:id:fushime2:20170113193641p:plainf:id:fushime2:20170113193650p:plainf:id:fushime2:20170113193707p:plainf:id:fushime2:20170113193719p:plain