メモ帳風twitterを作りたいと思い立ったが吉日、作ることにしたのでそのメモです。
特に言語にこだわりはなかったので目の前にあったpythonで作成することにしました。
#作成環境
- python3.7
###使用ライブラリ
- tkinter
- requests
- requests-oauthlib
#メモ帳のGUIを作成する
まずは張りぼてのメモ帳を作ります。
今回はpythonのライブラリであるTkinterを使います。
導入方法等はこちらを参考に。(参考資料)
とりあえず文字が入力できる箱を作ります。
アイコンはメモ帳っぽいやつを適当に用意してください。
# 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()
###スクロールバーを付ける
メモ帳っぽく画面内にテキストがすべて表示されている時でもスクロールバーが表示されるようにスクロールバーを付けます。
# スクロールバー
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)")
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)」だけは終了のコマンドを置いているので押すと終了するはずです。
#ツイートする処理を書く
メモ帳の側は完成したのでツイートする処理を書いていきます。
今回はメモ帳内に書いた文をツイートするようにします。
###Twitterアプリケーションの登録
まずはツイートするための準備をします。
コチラを参考に
- Consumer Key
- Consumer Secret
- Access Token
- Access Token Secret
を発行してください。
###ツイート処理
ツイートする処理を書いていきます。
呼び出すために関数として作成しておきます。
認証キーは別ファイルに置いておくほうが良いかもしれません。
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した関数を実行するように指定します。
#メニューバー
menubar = tk.Menu(root,font = my_font)
filemenu = tk.Menu(menubar, tearoff=0)
#コマンドとしてツイートする処理を呼び出す
filemenu.add_command(label="新規(N)", command = tweet)
無事メモ帳からツイートをすることができました。
これでメモ帳のフリしながらツイートができるね!!!
#今回作成したプログラム
今回作成したプログラムを1つにまとめておきます。
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