CSVファイルからWordPressに自動投稿するプログラムの作り方[ #Mac #AppleScript ]

CSVファイルにデータの一覧をまとめておいて、それを元にWordPressに投稿するプログラムのサンプルです。大量の記事を移し替える必要があるときなどに。

こんなことしなくてもWordPressにはxml-RPCが備えてあるのですが、諸事情で違う方法が必要なときにどうぞ。

CSVファイルを用意します

post-csv-to-wordpress-applescript
まず、データをまとめます。横軸に日付、タイトル、本文など。2行目まではヘッダ行とします。編集にはExcelやCalcなどを使うことと思いますが、書き出したCSVファイルはテキストエディタで開いて文字コードをShift_JISに、改行コードをMac用に変更してください。

AppleScriptの内容

つぎにAppleScriptでプログラムを書きます。「アプリケーション->ユーティリティ」に入っている「AppleScriptエディタ.app」を使います。

applescript

書く内容は次のとおり。

  • CSVファイルを読み込む
  • Safariで新規タブを開く
  • WordPressの新規投稿→データを挿入

コード

--CSVファイルの読み込み
--(ファイル選択ダイアログ)
set aFile to choose file
set csvList to readAndParseCSV(aFile) of me

--Safariをうごかす
tell application "Safari"
    activate
    reopen
    repeat with x from 3 to count of csvList
        set csvLine to item x of csvList
        tell window 1
            --新規タブ
            set current tab to (make new tab)
            --WordPress新規投稿ページへ
            set URL of document 1 to "http://*yourWPaddress*/wp-admin/post-new.php"
            delay 3
            
            --投稿フォームに入力
            --(投稿日時)
            do JavaScript "document.getElementsByName('aa')[0].value = '" & item 1 of csvLine & "'" in document 1
            do JavaScript "document.getElementsByName('mm')[0].value = '" & item 2 of csvLine & "'" in document 1
            do JavaScript "document.getElementsByName('jj')[0].value = '" & item 3 of csvLine & "'" in document 1
            do JavaScript "document.getElementsByName('hh')[0].value = '" & item 4 of csvLine & "'" in document 1
            do JavaScript "document.getElementsByName('mn')[0].value = '" & item 5 of csvLine & "'" in document 1
            --(タイトル)
            do JavaScript "document.getElementsByName('post_title')[0].value = '" & item 6 of csvLine & "'" in document 1
            --(本文)
            --本文を入力するために、まずは「テキスト」エディタをクリックしてONにする
            delay 1
            do JavaScript "document.getElementById('content-html').click()" in document 1
            do JavaScript "document.getElementsByName('content')[0].value = '" & item 7 of csvLine & "'" in document 1
        end tell
    end repeat
end tell


--ファイル読み込み関数
on readAndParseCSV(aFile)
    -- ファイル読み込み
    set aFilePointer to open for access aFile
    set aData to read aFilePointer as text
    close access aFilePointer
    
    -- 配列に格納
    set AppleScript's text item delimiters to return
    set aList to text items of aData
    set AppleScript's text item delimiters to ","
    repeat with i from 1 to count of aList
        set item i of aList to (text items of item i of aList)
    end repeat
    
    --配列を返す
    return aList
end readAndParseCSV

このプログラムはあまり細かいところまで気を遣ったものではありません。自分でSafariを立ち上げて、目的のWordPressにログインしてから実行してください。実行すると、Safariの画面はこんなふうになるはずです。

AppleScriptを使ってWordPressに自動投稿する

解説

Safariを立ち上げるのにtell applicationをして、そのあと、WordPressを操作するに「do JavaScript」を使っています。これはつまり、Safari上でjavascriptを操ってフォームの入力をさせているという意味です。ちなみに同じようなことをさせるには、システムイベント(「tell Application “System Events”」)で画面のクリックやキー入力を操作する方法もあります。

投稿をしたあとは放っておくと自動的に下書き保存されるので、保存ボタンを押す仕草は入っていません。明示的に保存させたい場合はClickを利用すればよいでしょう。またWordPressへの自動ログインなど、ご自身でアレンジして使ってみてください。

関連記事