Help us understand the problem. What is going on with this article?

[Python]メモ帳Twitterを作る(ツイート編)

メモ帳風twitterを作りたいと思い立ったが吉日、作ることにしたのでそのメモです。
特に言語にこだわりはなかったので目の前にあったpythonで作成することにしました。

作成環境

  • python3.7

使用ライブラリ

  • tkinter
  • requests
  • requests-oauthlib

メモ帳のGUIを作成する

まずは張りぼてのメモ帳を作ります。
今回はpythonのライブラリであるTkinterを使います。
導入方法等はこちらを参考に。(参考資料

とりあえず文字が入力できる箱を作ります。
アイコンはメモ帳っぽいやつを適当に用意してください。

notepad.py
# coding: Shift_JIS

import tkinter as tk
import tkinter.font as font

root = tk.Tk()

#フォント指定
my_font = font.Font(root,family = "MS Gothic")

#エディタの作成
text_widget = tk.Text(root, wrap = tk.NONE, font = my_font)
text_widget.grid(column=0, row=0, sticky = (tk.N, tk.S, tk.E, tk.W))
root.columnconfigure(0, weight = 1)
root.rowconfigure(0, weight = 1)

root.title("無題 - メモ帳")
root.iconbitmap(default = "XXXX.ico")
root.geometry("500x250")
root.mainloop()

メモ帳っぽい何かができました。
edit.png

スクロールバーを付ける

メモ帳っぽく画面内にテキストがすべて表示されている時でもスクロールバーが表示されるようにスクロールバーを付けます。

notepad.py
# スクロールバー
yscroll = tk.Scrollbar(text_widget, command=text_widget.yview)
xscroll = tk.Scrollbar(text_widget, command=text_widget.xview, orient=tk.HORIZONTAL)
yscroll.pack(side=tk.RIGHT, fill = "y")
xscroll.pack(side=tk.BOTTOM, fill = "x")
text_widget['yscrollcommand'] = yscroll.set
text_widget['xscrollcommand'] = xscroll.set

これでスクロールバーをそれっぽく付けることができました。
(右下がうまいことなってくれない...解決法わかるかたいれば教えてください)
scrollbar.png

メニューバーをつける

メモ帳にはもう一歩足りない...ということでメニューバーを作成します。

notepad.py
#メニューバー
menubar = tk.Menu(root, font = my_font)

filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label = "新規(N)")
filemenu.add_command(label = "開く(O)...")
filemenu.add_command(label = "上書き保存(S)")
filemenu.add_command(label = "名前を付けて保存(A)...")
filemenu.add_separator()
filemenu.add_command(label = "ページ設定(U)...")
filemenu.add_command(label = "印刷(P)...")
filemenu.add_separator()
filemenu.add_command(label = "メモ帳の終了(X)", command = root.quit)
menubar.add_cascade(label = "ファイル(F)", menu = filemenu)

editmenu = tk.Menu(menubar, tearoff=0)
editmenu.add_command(label = "About...")
menubar.add_cascade(label = "編集(E)", menu = editmenu)

formatmenu = tk.Menu(menubar, tearoff = 0)
formatmenu.add_command(label = "About...")
menubar.add_cascade(label = "書式(O)", menu = formatmenu)

viewmenu = tk.Menu(menubar, tearoff = 0)
viewmenu.add_command(label = "About...")
menubar.add_cascade(label = "表示(V)", menu = viewmenu)

helpmenu = tk.Menu(menubar, tearoff = 0)
helpmenu.add_command(label = "About...")
menubar.add_cascade(label = "ヘルプ(H)", menu = helpmenu)

root.config(menu = menubar)

これでメモ帳の側はできました!!!!
(ファイル以降のメニューバーの中身は頑張って作ってください(放棄))
「メモ帳の終了(X)」だけは終了のコマンドを置いているので押すと終了するはずです。
menubar.png

ツイートする処理を書く

メモ帳の側は完成したのでツイートする処理を書いていきます。
今回はメモ帳内に書いた文をツイートするようにします。

Twitterアプリケーションの登録

まずはツイートするための準備をします。
コチラを参考に

  • Consumer Key
  • Consumer Secret
  • Access Token
  • Access Token Secret

を発行してください。

ツイート処理

ツイートする処理を書いていきます。
呼び出すために関数として作成しておきます。
認証キーは別ファイルに置いておくほうが良いかもしれません。

notepad.py
import json
from requests_oauthlib import OAuth1Session

def tweet():
    CONSUMER_KEY = "XXXXXXXXXXXXXX"
    CONSUMER_SECRET = "XXXXXXXXXXXXXX"
    ACCESS_TOKEN = "XXXXXXXXXXXXXX"
    ACCESS_TOKEN_SECRET = "XXXXXXXXXXXXXX"
    twitter = OAuth1Session(CONSUMER_KEY,
                CONSUMER_SECRET,
                ACCESS_TOKEN,
                ACCESS_TOKEN_SECRET)
    params = {"status": text_widget.get('1.0','end -1c')}
    twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params)

ツイートは[ファイル(F)]-[新規(N)]の押下をトリガーにして作成します。
先ほど作ったメニューバーにtweetした関数を実行するように指定します。

notepad.py
#メニューバー
menubar = tk.Menu(root,font = my_font)

filemenu = tk.Menu(menubar, tearoff=0)
#コマンドとしてツイートする処理を呼び出す
filemenu.add_command(label="新規(N)", command = tweet)

tweet1.png
tweet2.png
tweet3.png
無事メモ帳からツイートをすることができました。
これでメモ帳のフリしながらツイートができるね!!!

今回作成したプログラム

今回作成したプログラムを1つにまとめておきます。

notepad.py
notepad.py
# coding: Shift_JIS

import tkinter as tk
import tkinter.font as font
import json
from requests_oauthlib import OAuth1Session

def tweet():
    CONSUMER_KEY = "XXXXXXXXXXXXXXX"
    CONSUMER_SECRET = "XXXXXXXXXXXXXXX"
    ACCESS_TOKEN = "XXXXXXXXXXXXXXX"
    ACCESS_TOKEN_SECRET = "XXXXXXXXXXXXXXX"
    twitter = OAuth1Session(CONSUMER_KEY,
                CONSUMER_SECRET,
                ACCESS_TOKEN,
                ACCESS_TOKEN_SECRET)
    params = {"status": text_widget.get('1.0','end -1c')}
    twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params)

root = tk.Tk()

#フォント指定
my_font = font.Font(root,family = "MS Gothic")

#エディタの作成
text_widget = tk.Text(root, wrap = tk.NONE, font = my_font)
text_widget.grid(column = 0, row = 0, sticky = (tk.N, tk.S, tk.E, tk.W))
root.columnconfigure(0, weight = 1)
root.rowconfigure(0, weight = 1)

# スクロールバー
yscroll = tk.Scrollbar(text_widget, command = text_widget.yview)
xscroll = tk.Scrollbar(text_widget, command = text_widget.xview, orient = tk.HORIZONTAL)
yscroll.pack(side = tk.RIGHT, fill = "y")
xscroll.pack(side = tk.BOTTOM, fill = "x")
text_widget['yscrollcommand'] = yscroll.set
text_widget['xscrollcommand'] = xscroll.set

#メニューバー
menubar = tk.Menu(root,font = my_font)

filemenu = tk.Menu(menubar, tearoff = 0)
filemenu.add_command(label = "新規(N)", command = tweet)
filemenu.add_command(label = "開く(O)...")
filemenu.add_command(label = "上書き保存(S)")
filemenu.add_command(label = "名前を付けて保存(A)...")
filemenu.add_separator()
filemenu.add_command(label = "ページ設定(U)...")
filemenu.add_command(label = "印刷(P)...")
filemenu.add_separator()
filemenu.add_command(label = "メモ帳の終了(X)", command = root.quit)
menubar.add_cascade(label = "ファイル(F)", menu = filemenu)

editmenu = tk.Menu(menubar, tearoff = 0)
editmenu.add_command(label = "About...")
menubar.add_cascade(label = "編集(E)", menu = editmenu)

formatmenu = tk.Menu(menubar, tearoff = 0)
formatmenu.add_command(label = "About...")
menubar.add_cascade(label = "書式(O)", menu = formatmenu)

viewmenu = tk.Menu(menubar, tearoff=0)
viewmenu.add_command(label = "About...")
menubar.add_cascade(label = "表示(V)", menu = viewmenu)

helpmenu = tk.Menu(menubar, tearoff = 0)
helpmenu.add_command(label="About...")
menubar.add_cascade(label="ヘルプ(H)", menu = helpmenu)

root.config(menu = menubar)

root.title("無題 - メモ帳")
root.iconbitmap(default = "XXXX.ico")
root.geometry("500x250")
root.mainloop()

最後に

端折りに端折った気がしますが、わからない箇所は下記の参考資料をご参照ください。
初めてのQiita投稿故、間違いやミス等ありましたらご指摘ください。
きっと次はタイムライン取得編とか書くはず...
※悪用などはしないように!!

twitter @higuratu

参考資料

Tkinter

Pythonで簡単なGUIを作れる「Tkinter」を使おう - Qiita
PythonのTkinterを使ってみる - Qiita
Scrollbar と Listbox - Python入門
Tkinter、Textを使う - naritoブログ
Tkinterでテキストエディタを作りたい - chikuchikugonzalezの雑記帳

Twitter

Twitterアプリケーションの登録方法 - akatsuki
PythonでTwitter API を利用していろいろ遊んでみる - Qiita
PythonでTwitterしてみた - Qiita

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした