LoginSignup
0
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-08-27

はじめに

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月に出版された本です。前から読みたいと思っていたので、読めて嬉しかったです。 

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