簡単なツイッター投稿プログラム

@shiracamus さんから教えていただいた組み方の考え方を参考に、作って見た。


確かに、役割分担でちゃんと書き分けることは、忘れた頃修正するときに頭に入りやすい。メンテナンス力が上がるね。


## 使い方。
シェルスクリプトかなんかで起動すればすぐ使えます。

とりあえず入れたメッセージ機能は、

```py

TL().message([ユーザー名],[テキスト])
```
でできます。

こんな感じで
<img width="521" alt="スクリーンショット 2017-03-31 10.32.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/152484/12180288-bf2c-25fa-f4ce-7a2dcd287319.png">


## スクリプト
```py3
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from twitter import *

class TL:
    def __init__(self):
        # 各自取得して入力してください
        OAUTH_TOKEN = ""
        OAUTH_SECRET = ""
        CONSUMER_KEY = ""
        CONSUMER_SECRET = ""
        self.T = Twitter(auth=OAuth(OAUTH_TOKEN, OAUTH_SECRET,CONSUMER_KEY, CONSUMER_SECRET))
    def tweet(self,text):
        self.T.statuses.update(status=text)
    def message(self,username,text):
        self.T.direct_messages.new(user=username,text=text)

class UI:
    def text():
        return input("ツイートを入力：")
    def generate_tag():
        tag = ''
        while True:
            t = input("タグ(#なし)：")
            if t == "":
                break
            else:
                tag += " #" + t
        return tag
    def tweet(text):
        print("投稿しています...")
        TL().tweet(text)
        print("-"*20 + "\n" + text + "\n" + "-"*20)


if __name__ == '__main__':
    while True:
        text = UI.text() + UI.generate_tag()
        UI.tweet(text)

```


## 追記：tweepyのほうが扱いやすかった

```py3
# -*- coding: utf8 -*-
import tweepy

class Account:
    consumer_key        = ""
    consumer_secret     = ""
    access_token_key    = ""
    access_token_secret = ""
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token_key, access_token_secret)
    api = tweepy.API(auth)
class TL():
    def __init__(self):
        self.api = Account.api
    def post(self,text):
        self.api.update_status(text)
    def post_media(self,media,text):
        self.api.update_with_media(media,status=text)
    def home_timeline(self,count=5):
        return self.api.home_timeline(count=count)
    def user_timeline(self,count=5):
        return self.api.user_timeline(screen_name=[ユーザー名],count=count)
    def get_followers(self):
        return self.api.followers(count=10)
    def send_message(self,screen_name,text):
        self.api.send_direct_message(screen_name, text)

class UI:
    def hr(icon="-"):
        print(icon*30)
    def post():
        text = UI.text()
        if text in ["media","jpg","png","img"]:
            media = input("URL or 画像パス:").replace(".png ",".png").replace(".jpg ",".jpg")
            text = UI.text() + UI.tag()
            TL().post_media(media,text)
        else:
            text = text + UI.tag()
            TL().post(text)
        UI.hr()
        print(text)
        UI.hr()
    def send_message(screen_name,text):
        TL().send_message(screen_name,text)
    def home_timeline():
        for tl in TL().home_timeline():
            print(tl.created_at) #datetime表示
            print(tl.text)
            UI.hr()
    def user_timeline():
        for tl in TL().user_timeline():
            print(tl.created_at) #datetime表示
            print(tl.text)
            UI.hr()
    def get_followers():
        for user in TL().get_followers():
            print(user.screen_name)
            UI.hr()
    def text():
        return input("ツイートを入力：")
    def tag():
        t = ''
        while True:
            put = input("タグ(#なし)：")
            if put == "":
                break
            else:
                t += " #" + put
        return t

def main():
    #UI.post()
    UI.user_timeline()
    UI.get_followers()

if __name__ == '__main__':
    main()
```