【Twitter API】Twitterをコマンドプロンプトで操れるPythonプログラムを作ってみた

最近マークダウン記法を少し学んでここで活かそうと思っているカラボンです。
また1から作ったら、前の<a href="https://qiita.com/Columba_Karasu/items/acf374b7aa90913f2d0f">あの記事</a>よりはかなり見やすくなったので弄りやすいのでまた別の記事を書くことにしました。

こちらがコードです
ちなみに前とは違い、3個ファイル別で書いています。

一個目

```python:twitter-for-cmd.py

import sys
import time
import tweepy

from twitterfunc import config
from twitterfunc import twitterfunc as tw


def connect():
  auth = tweepy.OAuthHandler(config.ck, config.cs)
  auth.set_access_token(config.at, config.ats)
  api = tweepy.API(auth)
  try:
    me = api.me()
  except:
  	print("キーが間違っています。")
  	sys.exit()
  return api


def twchelp(api):
	content = ("twitter-for-CUI help\ntimeline:タイムラインを表示出来ます。\ntweet:ツイートが出来ます。\nretweet:リツイートが出来ます。\nfavorite:いいねが出来ます。\nfollow:フォローが出来ます。\nunfollow:フォロー解除が出来ます。\nuser_info:ユーザーの詳細を確認できます。\n更なる詳細は\nhttps://github.com/Hashibutogarasu/twitter-for-Console-UI\nで確認できます。")
	print(content)


COMMANDS = {
    'timeline': tw.timeline,
    'TL': tw.timeline,
    'tweet': tw.tweet,
    'retweet': tw.retweet,
    'favorite': tw.favorite,
    'follow':tw.follow,
    'unfollow':tw.unfollow,
    'user_info':tw.profile,
    'help':twchelp
}

def main():
    api = connect()
    while True:
        command = input(">")
        if command in COMMANDS:
            COMMANDS[command](api)

if __name__ == "__main__":
	main()



```

ちなみに、これだけでは動かないので注意してください。
これは、関数のファイルなのでこれ単体では動きません。

2個目

これは、twitterfuncというフォルダを作ってその中に作成してください。

```python:twitterfunc.py


def profile(api):
	
  user_id = input("user_id:")
  
  user = api.get_user(user_id)
  
  print(user.name + f"\n@{user.screen_name}")
  
  print(user.description)
  
  print("場所:" + user.location)
  
def favorite(api):
	
  id = input("tweet_id:")
  
  try:
    api.create_favorite(id)
    print("いいねしました。")
  except:
    api.destroy_favorite(id)
    print("いいねを解除しました。")

def follow(api):
	
  follow_id = input("screen_name:")
  
  try:
    api.create_friendship(screen_name=follow_id)
    print("フォローしました。")
  except:
  	print("フォロー出来ませんでした。")

def unfollow(api):
	
  follow_id = input("screen_name:")
  
  confirm = input("フォロー解除しますか？\nyes or no\n:")
  
  if confirm == "yes":
    try:
      api.destroy_friendship(follow_id)
      print("フォロー解除しました。")
    except:
  	  print("フォロー解除出来ませんでした。")
  else:
    print("キャンセルしました。")

def retweet(api):

  id = input("tweet_id:")

  try:
    if not len(id) == 0:
      api.retweet(id)
      print("リツイートしました。")
    else:
      print("キャンセルしました。")
  except:
    confirm = input("リツイートを取り消しますか？")
    if confirm == "yes":
      
      
      status = api.get_status(id, include_my_retweet=1)

      if status.retweeted == True:
          api.destroy_status(status.current_user_retweet['id'])
          
      print("リツイートを取り消しました。")

    else:
      print("キャンセルしました。")


def timeline(api):
  for status in api.home_timeline():
	
    if (("RT" in status.text) == False):

      print("\n")	
      print("-"*42)
      
      if status.user.verified == True:
        print(status.user.name + " ✔︎" + " @" + status.user.screen_name)
      else:
      	print(status.user.name + " @" + status.user.screen_name)

      print(status.text.replace("https://t.co","\nhttps://t.co"))
      print(f"いいね:{status.favorite_count} リツイート:{status.retweet_count}")
      if status.favorited == True:
        print("いいね済み")
      elif status.favorited ==True and status.retweeted == True:
        print("いいね済み リツイート済み")
      elif status.favorited == False and status.retweeted == True:
        print("リツイート済み")
      else:
        pass

      print(str(status.created_at)+ " " +status.source)
      print()
      print(f"ツイートid:{status.id}")
      print(f"ユーザーid:{status.user.id}")
      print(f"url:https://twitter.com/{status.user.screen_name}/status/{status.id}")


def tweet(api):
	
  content = input("tweet_content:")
  id = input("tweet_id:")

  try:
      api.update_status(status = content, in_reply_to_status_id = id,auto_populate_reply_metadata=True)
      print("ツイートしました。")
  except:
    print("ツイートを送信できませんでした。")


```

最後に、設定用ファイルです。
これも同じく先程のファイルの中で作成して下さい。

```python

ck = "" #Twitter api key
cs = "" #Twitter api key secret
at = "" #Twitter access token
ats = "" #Twitter access token secret

```

#機能一覧

•ツイート（ツイートidを指定してリプライ可能）
•ツイートの削除
•いいねまたはいいね解除
•リツイートまたはリツイート解除
•フォロー
•フォロー解除
•ユーザーの情報を表示
•ユーザーのツイートを表示
•タイムラインの表示（リプやフォローができるように、ユーザーidやツイートidが出るようにしています。）（前より見やすくなっています。）

##タイムラインの機能の詳細

タイムラインで公式アカウントのニセモノがいると区別が付かないので、認証済みバッヂがある時に、チェックマーク（✔︎）を名前の後に付けるようにしました。
ツイートの日時やソースラベル（Twitter for iPhoneやTwitter for Androidなど）が見れるようにしました。

###参考記事

•前の@shiracamusさんからアドバイスしてもらったコード一部
リンク:https://qiita.com/Columba_Karasu/items/acf374b7aa90913f2d0f

•Markdown記法チートシート
リンク:https://qiita.com/Qiita/items/c686397e4a0f4f11683d