0
0

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: URLエンコード: リンクを貼るためにhttp://を避けて変換する

Last updated at Posted at 2021-05-18

はじめに

本コードはクリップボードにコピーされたテキストファイルを”http://”を避けてURLエンコードしてクリップボードにコピーし直すというものです。

  1. URLをクリップボードにコピー
  2. 本コードを実行
  3. クリップボードに変換後の内容が入っている

という趣旨です。

ところで

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

Macユーザー向けにAutomatorでの方法も記載しておきました。

きっかけ

知識の亡者として知られる、とあるお髭のハンガリー研究者と語り合っているうちに、ハイパーリンクをコピペで貼り付け用にWikipediaのURLをパーセントエンコードする時に、“//”の部分などもエンコードされてしまい甚だ迷惑。Googleマップも文中に日本語が入ってハイパーリンクが千切れてしまうという話題になりました。

そして、ググってみてもいくつかの記事で方法の指南はあるものの、正直言って私には難しすぎる……それなら、QuickBasic以来プログラミングなんてしたこともなかったのに、なぜか文法が異常に頭に入りやすく、しかもネットに例文が恐ろしいほどあるPythonで作ってしまおうと思ったというわけです。

前準備

Pythonとモジュールのインストール方法等は別途、お調べいただければと思います。必要なモジュールは

モジュール.py (1)
import pyperclip
import urllib.parse

を使用しましたので、pip install [モジュール名]で必要なものをインストールしましょう。

ソースコード

必要なものをインストールした後で、下記のコードを作成します。

Python3編

普通にPython3を使っていらっしゃる方は、こちらがよろしいかと思います。

url_en.py (2-1)
import pyperclip
import urllib.parse

if len(pyperclip.paste()) == 0:
	pass
else:
	str_raw = pyperclip.paste()
	str_enc = urllib.parse.quote(str_raw, safe='/:=@,.!?')
	pyperclip.copy(str_enc)

Python2.7編

url_en.py (2-2)
import urllib
import urlparse

text = raw_input()

if len(text) == 0:
	pass
else:
	str_raw = text
	str_enc = urllib.quote(str_raw, safe='/:=@,.!?')
	print(str_enc)

Automatorに入れ込む

アプリ編

  1. Automatorで新規作成「アプリケーション」を指定。
  2. クリップボードの内容を取得
  3. シェルスクリプトを実行:シェルを“/usr/bin/python”に指定
  4. Python2.7編」のソースコードをシェルの入力欄にコピペ
  5. クリップボードにコピー
  6. 適当な名前で保存。
  7. 実行ファイルにしたい場合は保存時や「書き出す...」で設定可能。

サービス編

テキストを選択した時に現れる「サービス」を利用したものです。

  1. Automatorで新規作成「クイックアクション」を指定。
  2. ワークフローが受け取る現在の項目:テキスト
  3. 検索対象:すべてのアプリケーション
  4. 「選択されたテキストを出力で置き換える」にチェック
  5. シェルスクリプトを実行:シェルを“/usr/bin/python”に指定
  6. Python2.7編」のソースコードをシェルの入力欄にコピペ
  7. 適当な名前で保存。あまり長いとメニュー欄が邪魔になります。

#Pythonista31
Pythonista3ではモジュールpyperclipが使用できないため、違うモジュール(clipboard)を使用します。

url_en.py (2-3)
import clipboard
import urllib.parse

if len(clipboard.get()) == 1:
	pass
else:
	str_raw = clipboard.get()
	str_enc = urllib.parse.quote(str_raw, safe='/:=@,.!?"\'')
	clipboard.set(str_enc)

終わりに

GoogleMapでも変換の検証済みです。なお、iPhoneアプリ版Wikipediaは「共有」のメニューでコピーした場合、複数のリンクを記事があるため2、Pythonista3版も考えざるをえませんでした……。

謝辞

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

  1. iOS用Python実行アプリ(有料)

  2. 位置情報などが設定されている場合にそうなる

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?