はじめに
妻がlivedoorblogに掲載していたブログをWordpressのサーバに移行しようとしてたのだが、livedoorblogには画像ファイルの一括エクスポート機能がない(それも問題な気がするが)とのことで、一肌脱ぐことに。
なお、一括取得するシェアソフトは存在するものほぼwindows用であり、私のメインPCがchromebookだったので、ため、GoogleAppScriptで一括取得する機能を作成しました。
作成した機能
ブログ記事のURLの一覧はlivedoorblogのエクスポートで取得可能だったので、その各ブログ記事に貼り付けている画像ファイルをGoogleDriveに一括格納する機能となっています。
画像ファイルのURLのみ判断して、かつ切り出す処理には、正規表現を使っています。(今回の機能を作る中で、正規表現の使い方がすごく勉強になりました)
また、htmlファイルに記載されている画像ファイルのURLには、自分で添付した画像ファイル以外の、他の記事のサムネイルや、livedoor自体のロゴ画像が含まれているので、URLの命名規則から不要なものは除外するようにしています。
実際のコード
GoogleスプレッドシートのA列にブログ記事のURLを貼り付けた上で、以下のスクリプトを実行
//スプレッドシートに記載したブログページのURLから画像を取得
function downloadImages() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A1:A");
var row = sheet.getLastRow();
for (i=1; i<row+1; i++){
// シートから1行ずつブログ記事のURLを取得
url = range.getCell(i, 1).getValue();
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');
// 取得したHTMLから正規表現でimgタグのsrc属性を取得
// img src=""内の画像URLを、()指定で切り出す
var reg = /<img.*?src=\"(.*?)\".*?>/g;
while ( m = reg.exec(html)){
// 正規表現にマッチして、かつ()指定で切り出した画像URLはm[1]に格納されている
var image_url = m [1];
// 取得したい画像のURLは"https://livedoor.blogimg.jp〜”なので
if (image_url.slice(0,27) === "https://livedoor.blogimg.jp"){
var res = UrlFetchApp.fetch(image_url);
var image = res.getBlob();
// 取得したimageをGoogle Driveにアップロード
var file = DriveApp.createFile(image);
}
}
}
}