16
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-10-25

メモ帳風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

16
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?