FC2ブログ

WordPressへの移行ツールをさらに強化して必要なファイルを取り込めるようにした

※ 今回、ギターネタはありません。

こんばんは。。。また平日で疲れます・・・
今週もがんばるぞーーー(棒)

前回はとりあえず例の曲を正式配信する、
日限を決めて、またどこまでできるかという感じで、
線引きしました。

いつも通りの練習である・・・最終報告まであと1週間・・・

こんばんは・・・今日はちょっとケーキ買いつつもほとんど寝てました。やっぱり疲れやすい自分がいます。前回はGarageBandをデータごと消してしまうという、VTuberやる上で1番やっちゃいけないことをしてしまいまして・・・なんとか基に近い感じで復元できたのかなと、、、まぁまぁ苦労しました。物理削除の恐ろしさ…操作ミスでVTuberの音声データを消してしまったので修復とテストしてたこんばんは…今日はほとんどグータラしてま...




今日は。。。ちょっと疲れて寝ながらパソコン操作・・・
例のfc2からWordPressに移行するプログラムが面白くて、
カスタマイズしていました。

連番ルールが原因のリンク切れ問題をもっと効率的に解消したかった

こんばんは・・・やっと週末ですね。昨日はブログを移行するためのやつを徹夜でやって、まぁ少しは改善できました・・・ブログ移行の課題。。。連番ルールが原因のリンク切れ問題を効率的に解消せよこんばんは・・・今日はテレワークでゆったりできています。ゆったりはうそか・・・テレワークでも忙しいと疲れます前回はE7ソロコン対策を引き続きやって、少し希望が見えていました。E7一発ソロコン対策でスケールの復習をしていた...




あのときのプログラム実行前の条件が、
ブログのバックアップファイルやsitemap.xmlを取ってくるようになっていました。
ただそれをやるとどのサイトにアクセスすればいいかって、
あとで見返したとき面倒だなっと。。。

もはやワンぽちでfc2のデータを可能な限り吸い上げて、
WordPress移行用に直せればと、、、


そのデータを吸い上げるところを追加しました。


import xml.etree.ElementTree as ET
import re
import requests
import os
import urllib
import urllib.request # opener
import urllib.parse # urlencode
import http
import http.cookiejar
import time

opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(http.cookiejar.CookieJar()))

post = {
'id':'xxx,
'pass':'xxx',
'done':'blog',
'mode':'login',
'email':'xxx',
}
data = urllib.parse.urlencode(post).encode('utf-8')
time.sleep(3)
conn = opener.open('https://secure.id.fc2.com/index.php?mode=login&done=blog&switch_language=ja', data) # ①
time.sleep(3) # Consider scraping
conn = opener.open('https://admin.blog.fc2.com/control.php?mode=control&process=backup&type=all')
time.sleep(3) # Consider scraping
ofs = open('blogdata.txt', 'w', encoding='utf-8') # ②
ofs.write(conn.read().decode('utf-8'))
ofs.close()

SRC_DOMAIN_NAME="xxx" # if use mydomain
SRC_FC2_DOMAIN_NAME="xxx" # fc2 default domain
TGT_DOMAIN_NAME="xxx" # new address

IMG_ADDRESS="https://blog-imgs-(\d{1,}).fc2.com/x/x/x/xxx/"

def checkBlogCardTag(line):
if "blogcard" in line:
return True
else:
return False

def replaceBlogCardTag(line):
new_line = re.sub(r"blogcard", "fc2-blogcard", line)
return new_line

def replaceLinkInBlog(line):
new_line = re.sub(r"("+SRC_DOMAIN_NAME+"|"+SRC_FC2_DOMAIN_NAME+")/blog-entry-(\d{1,}).html",
TGT_DOMAIN_NAME+r"/blog-entry-\2", line)
if SRC_DOMAIN_NAME in line or SRC_FC2_DOMAIN_NAME in line:
new_line = re.sub(r" target=\"_blank\"", "", new_line)
return new_line

def replaceImgLinkInBlog(line):
new_line = re.sub(r"("+SRC_DOMAIN_NAME+"|"+SRC_FC2_DOMAIN_NAME+")/img/",
TGT_DOMAIN_NAME+r"/wp-content/uploads/fc2data/", line)
new_line = re.sub(r"("+IMG_ADDRESS+")",
TGT_DOMAIN_NAME+r"/wp-content/uploads/fc2data/", new_line)
if SRC_DOMAIN_NAME in line or SRC_FC2_DOMAIN_NAME in line:
new_line = re.sub(r".jpeg/",".jpeg", new_line)
new_line = re.sub(r".jpg/",".jpg", new_line)
new_line = re.sub(r".png/",".png", new_line)
new_line = re.sub(r" target=\"_blank\"", "", new_line)
return new_line

# make the sluglist
r = requests.get(SRC_DOMAIN_NAME+'/sitemaps.xml') # ③
time.sleep(3)
r.encoding="UTF-8"
with open ('sitemaps.xml','wb') as sitemap:
sitemap.write(r.content)
tree = ET.parse('sitemaps.xml')
slist = []
for i in tree.iter():
if "blog-entry" in i.text :
tmp = i.text.replace(SRC_DOMAIN_NAME + '/', '')
tmp = tmp.replace(SRC_FC2_DOMAIN_NAME + '/', '')
tmp = tmp.replace('.html', '') # escape parm link
slist.append(tmp)
slist.reverse() # sort asc

# insert the basename
fileobj = open("blogdata.txt", "r", encoding="utf_8")
fileobj2 = open("blogdataMgrt.txt", "w", encoding="utf_8")

idx = 0
while True:
line = fileobj.readline()
if line:
if not "if" in line and "PRIMARY CATEGORY:" in line: # why use condition 'not "if"' : because of consider to program in blog
fileobj2.write(line)
bname =slist[idx]
fileobj2.write('BASENAME: '+bname+'\n')
idx = idx + 1
elif SRC_DOMAIN_NAME in line or SRC_FC2_DOMAIN_NAME in line or checkBlogCardTag(line):
line = replaceLinkInBlog(line)
line = replaceBlogCardTag(line)
line = replaceImgLinkInBlog(line)
fileobj2.write(line)
elif not "if" in line and "EXTENDED BODY:" in line: # if not include the extend body, remove in blog
tmp1 = fileobj.readline()
tmp2 = fileobj.readline()
if tmp1 == '\n' and tmp2 == '-----\n':
pass
else:
fileobj2.write(line)
fileobj2.write(tmp1)
fileobj2.write(tmp2)
else:
fileobj2.write(line)
else:
break

fileobj2.close()
fileobj.close()

os.remove('blogdata.txt')
os.remove('sitemaps.xml') # ④


ポイントは3点、、、
(1) セッション作成後のデータ回収
 ①の処理にてログインした状態のセッションを作って、
 ②でバックアップファイルをダウンロード&保存しています。
(2) sitemaps.xmlを回収
  ③にてsitemaps.xmlにアクセスしてデータをダウンロード&保存しています。
(3) 一時ファイルを削除
 (1)、(2)のデータは飽くまで一時ファイル、、、
 それ以降の処理でWordPress用のデータに変わったものができるので、
 仕事としてはやり切った・・・ということで邪魔なデータは消しています。


こんなものでしょうか。
ここまで凝るともはやプログラムを1つのファイルに収めていいモノか怪しくなりました。
やはりモジュール分割を・・・

あとブログ移行では画像やメディアなどもダウンロードしなければなりませんが、
そのロジックが思いつきませんでした。
これについては研究中です。


ただ移管するだけでなく、
同じようにブログ移管の課題を抱えている人に役立てばと思います。

ではでは、おやすみなさい。
にほんブログ村 音楽ブログ エレキギターへ

#実はこのプログラムバグがあります。自分のブログのmp3へのリンクを付け替えできてません。調査したところファイルは3つしかないので、手作業でできますが。。。なんかここにきて手作業は微妙

例えば以下で作ったものとかです。。。直し方はイメージできてるので(画像のリンク張替えと一緒)、余裕があるときやろう・・・

無料のアプリでできるの!?4つのアプリによる音声ファイルの埋め込み

「アンプシュミレーターは使えたから、それで弾いた音声をブログに載せたい」これは前回、アンプシュミレーターを使う…というより、宅録をやる際、他のアプリとの連携が課題でした。その解決策を調べたので書いてみました、宅録をやりたい人の参考になればと思います。今回、以下のページを参考にさせていただき、iPhoneで宅録しその音声ファイルをブログに載せることができるかやってみました。「iRig製品+Amplitubeアプリ(iPhon...

スポンサーサイト



コメント

非公開コメント

プロフィール

enrock2020

Author:enrock2020
1990年生まれ。神奈川出身。趣味はエレキギター、カラオケ、音ゲー、プログラミング。好きなアプリはバンドリ、ようつべ

はじめまして、最近エレキギターをやりはじめました。全然できないので、あの手この手で勉強していきます。よろしくお願いします。

Twitter: @enrock2020
ブログの方針: こちら

アクセス

検索フォーム

ブロとも申請フォーム

QRコード

QR