search
LoginSignup
4

More than 3 years have passed since last update.

posted at

updated at

GoogleドキュメントからWordPressにコピーした文章をクリップボード上で一瞬で整形する

はじめに

Webに公開するブログ記事等の下書きにGoogleドキュメントを使っていて、見出し構造や強調等の修飾を維持したままWordPressに貼り付けることがよくあります。

Googleドキュメントは便利で好きなのですが、WordPress上で直接編集していないことの弊害もありまして、以下のような煩わしい追加作業が毎回発生しています。

  • WordPressへの貼り付け時に自動的に各行に付与される<span style="font-weight: 400;">というタグを削除
  • 下書き時に便宜上付けている###といった記号を削除

これらを毎回サクラエディタの置換で削除するのは手間です。

そこで、この面倒な置換作業を一瞬で終えるPythonプログラムを作成しました。

というのも、『退屈なことはPythonにやらせよう』1という書籍を最近読みまして。
作業を自動化していくモチベーションが湧いたわけです。

何ができるのか

実際にどのような機能か、例を紹介します。

Googleドキュメント上

Googleドキュメント上ではこのような感じです。
作業自動化_例.PNG

WordPressへの貼り付け後

WordPressの「ビジュアルモード」で貼り付け、「テキスト」モードで確認すると以下の通りです。

<span style="font-weight: 400;">こんにちは。</span>

<b>Pythonで単純作業を自動化</b><span style="font-weight: 400;">、とても楽しいですよね。</span>

<span style="font-weight: 400;">今回は『退屈なことはPythonにやらせよう』について紹介します。</span>
<h2><span style="font-weight: 400;"># 『退屈なことはPythonにやらせよう』とは</span></h2>
<span style="font-weight: 400;">2017年6月に出版されました。</span>

<span style="font-weight: 400;">書店で平積みになっているのを目にした方も多いのでは?</span>
<h3><span style="font-weight: 400;">## ノンプログラマにも</span></h3>
<b>ノンプログラマ</b><span style="font-weight: 400;">向けに書かれています。</span>
<h3><span style="font-weight: 400;">## プログラマにも</span></h3>
<b>プログラマ</b><span style="font-weight: 400;">にもおすすめです。</span>
<h2><span style="font-weight: 400;"># まとめ</span></h2>
<span style="font-weight: 400;">みなさんも、レッツ</span><b>自動化</b><span style="font-weight: 400;"></span>

見出しや強調をそのまま貼り付けたいとはいえ、ここからいちいち<span style="font-weight: 400;">##などを削除するのは面倒ですね。

今回のプログラム実行後

それが、今回のプログラムを実行すると一瞬で以下の通りです。

こんにちは。

<b>Pythonで単純作業を自動化</b>、とても楽しいですよね。

今回は『退屈なことはPythonにやらせよう』について紹介します。
<h3>『退屈なことはPythonにやらせよう』とは</h3>
2017年6月に出版されました。

書店で平積みになっているのを目にした方も多いのでは?
<h4>ノンプログラマにも</h4>
<b>ノンプログラマ</b>向けに書かれています。
<h4>プログラマにも</h4>
<b>プログラマ</b>にもおすすめです。
<h3>まとめ</h3>
みなさんも、レッツ<b>自動化</b>

なんて素敵!自動化って素晴らしい…!

それでは、レッツ自動化!!

環境

  • Windows10 64bit
  • Python3.5

方針

  • Python3でpyperclipモジュールを使用し、クリップボード上で置換
  • .batファイルを用いてプログラムの実行を省力化
  • 想定外の置換が発生していないか確認するため、置換数を処理後に表示

コード

まずはコードについて、次に実行方法について説明します。

1. モジュールのインポート

import pyperclip
import re
from ctypes import *

2. 文字列置換用の関数を定義

  • seq_before: 置換前
  • seq_after: 置換後
  • text: 置換対象の文章
def wp_0011(seq_before, seq_after, text):
    conv = re.compile(seq_before) # 置換部分検索用のRegexオブジェクトを生成
    num = len(conv.findall(text)) # 置換した数
    result = seq_before + ': ' + str(num)
    text = conv.sub(seq_after, text) # 文章を置換
    return result, text # 置換した数、置換後の文章を返す

3. クリップボードの文章を読み込み

text = pyperclip.paste()

4. 各置換を実行

res_list = [] # 置換数の表示用

# 1.<span style="font-weight: 400;">→削除
seq_before = r'<span style="font-weight: 400;">'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]

# 2.</span>→削除
seq_before = r'</span>'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]

# 3.### , ## , # ,→削除
seq_before = r'#{1,3}\s'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]

# 4.h3>→h4>, h2>→h3>
seq_before = r'h3>'
seq_after = r'h4>'
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]

seq_before = r'h2>'
seq_after = r'h3>'
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]

5. 置換後の文章をクリップボードに貼り付け

pyperclip.copy(text)

6. 置換結果をメッセージボックスに表示

コンソール上にprint()しても処理終了後は一瞬で消えてしまうため、メッセージボックスを表示させました。
他にも、print()してからinput()で標準入力を待つことでコンソールが消えるのを防ぐ案もありますが、メッセージボックスを使ってみたかったのです。

results = '\n'.join(res_list)

# 結果確認用にWindowsのメッセージボックスを表示
user32 = windll.user32

user32.MessageBoxW(
    0, 
    results, 
    "Results", 
    0x00000040)

使い方

.batファイルを用いて、キーボード上で数回操作するだけで実行できるようにします。

準備

  • 上で作った.pyファイルのファイル名をWP_0011.py
  • .batファイルをWP_0011.bat

とします。

  1. .batファイルを作成(後述)
  2. WP_0011.py, WP_0011.batを同じフォルダに保存
  3. 「環境設定」から保存フォルダへのPathを通す

.batファイルの中身

python [full path]\WP_0011.py

.pyファイルは絶対パスを入力

使用

  1. 変換したいテキストをコピー
  2. Windows + Rで「ファイル名を指定して実行」を起動し、WP_0011.batと入力→Enterで実行
  3. 変換後のテキストがクリップボードに保存され、変換結果がメッセージウインドウで表示されるのでEnterで閉じる
  4. テキストをペースト

※次回以降はWindows + REnterで即実行される。
「ファイル名を指定して実行」で別のプログラムを実行した場合は、上下矢印キーでWP_0011.batを探せる。

まとめ

無事、煩わしい置換作業を一瞬で実行できるようになりました。
Windows + REnterで実行できる点がお気に入りです。
マウス操作不要なのは嬉しいですよね。

参考

コードは以下を参考にさせていただきました。

GitHub

ソースコードをGitHub上で公開しています。
https://github.com/kokokocococo555/automate/tree/master/convert

コード全体

#! python3
# WP_0011.py - google docsからWPへコピーした際のHTMLの整形のため、クリップボードのテキストに以下の変換を行う
# 1.<span style="font-weight: 400;">→削除
# 2.</span>→削除
# 3.### , ## , # ,→削除
# 4.h3>→h4>, h2>→h3>

import pyperclip
import re
from ctypes import *

def wp_0011(seq_before, seq_after, text):
    conv = re.compile(seq_before)
    num = len(conv.findall(text))
    result = seq_before + ': ' + str(num)
    text = conv.sub(seq_after, text)
    return result, text

text = pyperclip.paste()

res_list = []

# 1.<span style="font-weight: 400;">→削除
seq_before = r'<span style="font-weight: 400;">'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]

# 2.</span>→削除
seq_before = r'</span>'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]

# 3.### , ## , # ,→削除
seq_before = r'#{1,3}\s'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]

# 4.h3>→h4>, h2>→h3>
seq_before = r'h3>'
seq_after = r'h4>'
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]

seq_before = r'h2>'
seq_after = r'h3>'
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]

pyperclip.copy(text)

results = '\n'.join(res_list)

# 結果確認用にWindowsのメッセージボックスを表示
user32 = windll.user32

user32.MessageBoxW(
    0, 
    results, 
    "Results", 
    0x00000040)

  1. O'REILLY JAPANから2017年6月に出版された本です。前から読みたいと思っていたので、読めて嬉しかったです。 

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
What you can do with signing up
4