1
1

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.

Pythonista3: WikipediaのURLをWikipedia PageIDのURLに変換する

Last updated at Posted at 2021-05-18

はじめに

本コードはiOS版アプリPythonista31を用いて、クリップボードにコピーされたWikipediaのURL(テキスト形式)をWikipedia PageIDのURLに変換してクリップボードにコピーし直すというものです。

  1. URLをクリップボードにコピー
  2. Pythonista3を起動
  3. 本コードを実行
  4. Pythonista3のコンソールに変換後URLを吐き出す
    という趣旨です。

ところで

3つ目の投稿……とはいえ、1つ目の投稿と似たようなものになってしまいました。2021-05-18時点でPython歴3週間です。改善点等があればご指摘いただければ助かります。投稿のお作法さえもまだまったく分からない状態です……。

きっかけ

詳細は初投稿の方に記載した通りです……が、そのことを思いついた時、ちょうど電車で長距離を移動しなければならないにも関わらず、パソコンを持ち歩かなかったために、最初にPythonista3を使ってソースコードを書いたのでした。このアプリ、iOSなだけあってカーソル移動がやはり不便なので、こっちの方が大変だった記憶しかありません。おかげでリニアモーターで無理やり地中深くから地上近辺まで乗り上げたりする、丹下健三作品2に出勤する人たちと本郷キャンパスに通う人たちのためだけに路線計画がされたんじゃないかと邪推してしまう電車で「の」の字の部分での乗り換えに失敗して、端から端まで旅をしてしまいました3。そのため、こちらの方がコードが雑です。

前準備

Pythonista3は有料です。別途お買い求めください。

ソースコード

下記のコードを作成します。

wpu2wpid.py (1)
import re
import sys
import requests
import clipboard

in_text = clipboard.get() #クリップボードを取得

#------------
#URL判定ブロック
if not 'https://' in in_text:
	sys.exit("ハイパーリンクではありません。") #クリップボードの内容をそのままで終了
	
if '?curid=' in in_text:
	sys.exit("既に変換済みです") #クリップボードの内容をそのままで終了
	
lang = in_text[8:10] #言語抜き出し

text = in_text.replace('https://', '') #URL抜き出し(行程1)
text = text.replace(lang, '') #URL抜き出し(行程2)

if not '.wikipedia.org/wiki/' in text:
	sys.exit("Wikipediaのアドレスではありません") #クリップボードの内容をそのままで終了
	
text = text.replace('.m.wikipedia.org/wiki/', '') #URL抜き出し(行程3)

#------------
#変換ブロック
def getWikiData(url, params): #getWikiDataという関数を作成
	res = requests.get(url, params = params)
	return res.json()
url = 'https://' + lang + '.wikipedia.org/w/api.php' #WikipediaのAPIを使用
params = { "action" : "query",
			"titles"  : text,
			"format"  : "json"
			} #変数paramsにWikipediaのAPIからの情報を代入
wtext = getWikiData(url, params)
print(wtext)
wpid = str(wtext['query']['pages'])
wpid = wpid[2:]
wpid = re.search(r'\d+', wpid)

idurl = 'https://' + lang + '.wikipedia.org/?curid=' + wpid.group()
clipboard.set(idurl)
sys.exit("クリップボードにコピー完了:" + idurl) #操作完了報告

終わりに

-最後の行をちょちょっと変えれば、クリップボードに書き戻すというのもアリだと思います。「ショートカット」を使用した時にどちらの方が便利なのか、まだ分かりかねている状態です。
+クリップボードに変換後のリンクがコピー、コンソールに表示されます。

謝辞

早速のご教示ありがとうございます。

  1. iOS上でPython3を実行できるアプリ。一部モジュールが使えないが、アプリ「ショートカット」にも対応しているため、かなり多様な使い道があると思います。……というか、こういうことができるようにするの、スティーヴ・ジョブズなら許さなかっただろうなあ。

  2. 私、実は彼の建築のファンなんですよね。ただし外側だけ。内部は空洞にして地下を掘って、快適な空間は別の人に設計してもらえばよかったのですよ。あの人の建築はオブジェとして優れているのです。偉い人にはそれがわからんのです。

  3. パソコンを持ち歩いたとしても同じだっただろうとか、あんたそんなに集中力あったっけ、という種類のツッコミはご勘弁ください。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?