bringartmのブログ

忘れそうなことを記録にのこそうと。

Twitterへの画像投稿プログラム(python)

RaspberryPiで自動投稿をしてみたくなり、カメラ画像などができないかなあと考えています。

まずは Twitterで投稿するプログラムを改良してみました。

CK, CS, AT, AS には Twitterから取得した各種のコードIDを記入してください。

#!/usr/bin/env python
# coding: utf-8

import json
from requests_oauthlib import OAuth1Session

CK = '' # Consumer Key
CS = '' # Consumer Secret
AT = '' # Access Token
AS = '' # Accesss Token Secert

url_media = "https://upload.twitter.com/1.1/media/upload.json"
url_text = "https://api.twitter.com/1.1/statuses/update.json"

# OAuth認証 セッションを開始
twitter = OAuth1Session(CK, CS, AT, AS)

# 画像投稿
files = {"media" : open('image.jpg', 'rb')}
req_media = twitter.post(url_media, files = files)

# レスポンスを確認
if req_media.status_code != 200:
    print ("画像アップデート失敗: %s", req_media.text)
    exit()

# Media ID を取得
media_id = json.loads(req_media.text)['media_id']
print ("Media ID: %d" % media_id)

# Media ID を付加してテキストを投稿
params = {'status': '画像投稿テスト', "media_ids": [media_id]}
req_media = twitter.post(url_text, params = params)

# 再びレスポンスを確認
if req_media.status_code != 200:
    print ("テキストアップデート失敗: %s", req_text.text)
    exit()

print ("OK")

メモ引用 Twitterタイムラインを監視する

http://nwpct1.hatenablog.com/entry/2013/10/17/233339

タイムラインを監視する

これについては調べると↓の記事がとても参考になりました。
?tweepyがUser Streamsに対応していた

この記事に載っているタイムラインを監視するpythonのプログラムがとても綺麗に書かれていたので,とても読みやすかったです。タイムラインの取得はこのページのプログラムで解決しました。本当に感謝です。 上記のページに乗っていたプログラム↓を実行させてもらいます。

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

from tweepy.streaming import StreamListener, Stream
from tweepy.auth import OAuthHandler
from tweepy.api import API
from datetime import timedelta

def get_oauth():
    # 以下4つのキー等は適宜取得して置き換えてください。
    consumer_key = 'XXXXXXXXXXXXXXXXXXXXXX'
    consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    access_key = 'xxxxxxx-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    access_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_key, access_secret)
    return auth

class AbstractedlyListener(StreamListener):
    """ Let's stare abstractedly at the User Streams ! """
    def on_status(self, status):
        # Ubuntuの時は気づかなかったんだけど、Windowsで動作確認してたら
        # created_atはUTC(世界標準時)で返ってくるので日本時間にするために9時間プラスする。
        status.created_at += timedelta(hours=9)
        print(u"{text}".format(text=status.text))
        print(u"{name}({screen}) {created} via {src}\n".format(
            name=status.author.name, screen=status.author.screen_name,
            created=status.created_at, src=status.source))

if __name__ == '__main__':
    auth = get_oauth()
    stream = Stream(auth, AbstractedlyListener(), secure=True)
    stream.userstream()

鉄道模型のポイント制御

TOMIXのポイントセレクターが壊れてしまったので、代わりに電子的なスイッチができないかネットで調べてみました。

調べてみるとコンデンサーの充放電で ポイントを切り替えられるということがわかり、ちょっとパーツを組み合わせて作ってみました。

f:id:bringartm:20170122133216j:plain

開設

ハードウェアは過去の先人達の回路図をみて適当にはんだごてで部品を万能基板につけるぐらいで、スイッチで何かを動作させる程度の工作を楽しんでいます。 ソフトウェアは ちょっとした実用プログラムを手作りして、こちらも楽しんでいます。