URLをコピーしてクリップボードに送ると、Webスクレイピングで記事のタイトルを取得して表示するPythonのGUIアプリ(url2title)を作りました。
自分のはてなブログの記事のURLが日付の場合に、パッと見たときに、何の記事?となることがよくあります。そんなとき、いちいちブラウザで開いてタイトルを確認するのが手間なので、ツールとして作ってみました。
最近は、記事を書くときに、それらしいURLを設定するようにしてるのですが、過去の記事はURLを変更する勇気もなく、困っていたので作りました!
それでは、やっていきます!
はじめに
今回作ったGUIアプリは、前回紹介した「TkEasyGUI」を使ってます。前回の記事はこちらです。
daisuke20240310.hatenablog.com
また、URLからタイトルに変換する方法は、以前に紹介したWebスクレイピングを使ってます。そのときの記事はこちらです。
daisuke20240310.hatenablog.com
この両方の内容を組み合わせただけの簡単GUIアプリです。
あと、一応、スクレイピングを使っているので、どこでもアクセスしていいわけではないので、自分のサイトに限定して使っていただく制限を入れています。
では、使い方の説明と、ソースコードの説明をしていきます。
事前準備
ここでは、Windowsで使う方法を説明します。GUIアプリの名前は「url2title」とします。
Pythonをインストールしていることが前提になります。
一応、ダウンロード先だけ示しておきます。
www.python.org
Pythonのライブラリがいくつか必要になります。
コマンドプロンプトなどで、以下の3つのパッケージをインストールします。
pip install requests beautifulsoup4 TkEasyGUI
準備は以上です。
url2titleの使い方
まず、以下からダウンロードします。
github.com
上をクリックすると以下のような画面になると思うので、ダウンロードボタンを押すとダウンロードできます。下の方にソースコードを貼ってますので、それをコピーしてエディタに貼り付ける方法でも大丈夫です。
ダウンロードしたファイル「url2title.pyw」を適当なエディタで開きます。ソースコードをコピーした方は、ファイル名は何でもいいですが、拡張子は「pyw」にする必要があります。「pyw」にすることで、ダブルクリックで実行できるようになります。
ここではIDLEのエディタを使います。
ファイルを右クリックして、「Edit with IDLE」をクリックして開きます。
8行目を変更する必要があります。ダウンロードした「url2title」の状態だと、変換できるURLが、私のブログのページだけに限定されています。私のブログのトップページのURLを設定しているので、ここを自分のサイトのトップページのURLに書き換えてください。
では、「url2title」を、ダブルクリックして起動します。
すると、小さなウィンドウの「url2title」が起動します。
あとは、タイトルを調べたいURLをコピーしてクリップボードに入れると、タイトルが表示されると思います。
この例ではリンクを右クリックしてURLをコピーしていますが、https://daisuke20240310.hatenablog.com/entry/2024/04/04/032847
という文字列をコピーしても同じことが出来ます。
簡単ですが、使い方は以上です。
ソースコードの説明
ソースコードの説明をします。
一応、「TkEasyGUI(Python)で簡単GUI(PySimpleGUI有料化に伴い移行します!) - daisukeの技術ブログ」と、「PythonでWebスクレイピング(ChatGPTにPythonコードを生成してもらう) - daisukeの技術ブログ」でも説明したので、今回は流れだけの説明にしたいと思います。
上から8行目のMYURLという変数が、上でも説明した変更が必要なところです。
import TkEasyGUI as eg
import pyperclip
import requests
from bs4 import BeautifulSoup
DEBUG = False
TITLE = "url2title.py"
MYURL = "https://daisuke20240310.hatenablog.com"
def get_title( url ):
try:
response = requests.get( url )
response.raise_for_status()
soup = BeautifulSoup( response.text, 'html.parser' )
title = soup.title.text.strip()
if DEBUG: print( f"URL: {url} - タイトル: {title}" )
return title
except Exception as e:
print(f"エラーが発生しました: {e}")
def main():
layout = [ [eg.Text("", key='text')] ]
window = eg.Window( TITLE, layout, size=(700, 60) )
getdata = pyperclip.paste()
getdata_old = ""
while True:
event, values = window.read( timeout=1000 )
if event != "__TIMEOUT__" and event != "-TIMEOUT-":
if event == eg.WIN_CLOSED:
break
getdata = pyperclip.paste()
if getdata == getdata_old:
continue
else:
txt = getdata
if MYURL in getdata:
title = get_title( getdata )
if DEBUG: print( f"getdata={getdata}, title={title}" )
if title is not None:
txt = "URL:" + getdata + "\n" + "タイトル:" + title
window['text'].update( txt )
getdata_old = getdata
window.close()
if __name__ == '__main__':
main()
全体の流れとしては、真ん中ぐらいにある「while True:」の無限ループをずっと回っています。
- window.read():1秒ごとにクリップボードを確認するために起き上がります
- getdata = pyperclip.paste():クリップボードから内容を取得します
- if MYURL in getdata::取得したURLが自分のサイトを含んでいるかどうかを判定しています
- get_title():スクレイピングの関数をコールしています
- タイトルが取得できたら、URLと組み合わせて、2行の文字列を作って、GUIパーツに反映します
簡単ですが説明は以上です。
それから、このソースコードは自由に変更して使って大丈夫です。一応、再配布はダメということにしておきます。
クリップボードを使ったアプリは、アイデア次第で、とても便利なものになると思うので、活用して頂けたらと思います。
例えば、日をまたぐ時間の差の計算(3日前の22:43から今日の3:05までとか)って、暗算で計算するのは少し面倒ですよね。2つの時刻並べて書いておき、コピーするだけで時間差を表示するアプリを作っておくと便利です。
また、和暦と西暦の変換とか、指定したアスキーコードから値を表示するとか、便利そうです。
終わりに
今回は、Pythonで、簡単なGUIアプリを作ってみました。
Google Search Consoleで、URLを見ただけでは、何のページか分からず、いちいちアクセスして確認するのが面倒だったので作ってみました。
今回は以上です!
最後までお読みいただき、ありがとうございました。