ChatGPTは色々と使える
最近、ゼルダのプレーと、今更ながら朝ドラの「あまちゃん」にハマってしまい、他のことがかなり手つかず状態な今日この頃です。
(あまちゃんネタは別記事でそのうち)
そのようななか、毎月1日に必ず行っている手動バックアップ(RAIDは色々な考えがあり、ビデオサーバのみRAID)をしている最中に、rsyncのコピーエラーが発生しました。
この現象はたまに見かけていたのですが、とあるHDDケースの故障(?)によりrsync中にOSがクラッシュする現象が発生し(これは別の機会があったら記事にする)、この影響で中途半端にコピーしたファイルがrsync的にイカレてしまうということが先月から毎回発生する状況に…
解消方法はエラー対象となるファイルを削除して手動でコピーし直せば良いのですが、残念なことにそのファイル名が日本語ファイルの場合は表示がおかしくなり、特定が難しくなります。
一例を挙げると
といったもので、「\#351\#226\#213\#347\#231\#272...」ってなんだよ、ヲイ!ってなものでした。
ファイル名が分かんねーじゃねーかYO!!
運の良いことに前回と今回は対象のファイル名は前後のアルファベットの文字列情報を元に特定できたのですが、この化けているような数字の羅列がイミフでした。
最初は単純に「UTF-8のコードなのかな?」と思いましたが、頭の351で、あれっ? 255以上の数値だな。じゃぁ、351を16進で表せばいいのかな…と思ったのですが、単純変換では「そのファイル名の文字列にならない」ので、思惑通りに行かず…
と、ここでこんなマニアックなフォーマット情報は全世界をググレカスしても出てこない訳で、かといってrsyncのソースを見てエラー出力フォーマットの仕様を理解するのも時間の無駄と思い、「じゃぁ、AIに相談するか…」と「ChatGPT」を駆使して色々と解決しました。
(あまちゃんネタは別記事でそのうち)
そのようななか、毎月1日に必ず行っている手動バックアップ(RAIDは色々な考えがあり、ビデオサーバのみRAID)をしている最中に、rsyncのコピーエラーが発生しました。
この現象はたまに見かけていたのですが、とあるHDDケースの故障(?)によりrsync中にOSがクラッシュする現象が発生し(これは別の機会があったら記事にする)、この影響で中途半端にコピーしたファイルがrsync的にイカレてしまうということが先月から毎回発生する状況に…
解消方法はエラー対象となるファイルを削除して手動でコピーし直せば良いのですが、残念なことにそのファイル名が日本語ファイルの場合は表示がおかしくなり、特定が難しくなります。
一例を挙げると
rsync: [generator] readlink_stat("/media/oki/ContentsBackup/ <略> \#351\#226\#213\#347\#231\#272\#343\#202\#271 <略> \#347\#247\#230\#350\#251\#261.iso.lRuGLX") failed: Input/output error (5) |
といったもので、「\#351\#226\#213\#347\#231\#272...」ってなんだよ、ヲイ!ってなものでした。
ファイル名が分かんねーじゃねーかYO!!
運の良いことに前回と今回は対象のファイル名は前後のアルファベットの文字列情報を元に特定できたのですが、この化けているような数字の羅列がイミフでした。
最初は単純に「UTF-8のコードなのかな?」と思いましたが、頭の351で、あれっ? 255以上の数値だな。じゃぁ、351を16進で表せばいいのかな…と思ったのですが、単純変換では「そのファイル名の文字列にならない」ので、思惑通りに行かず…
と、ここでこんなマニアックなフォーマット情報は全世界をググレカスしても出てこない訳で、かといってrsyncのソースを見てエラー出力フォーマットの仕様を理解するのも時間の無駄と思い、「じゃぁ、AIに相談するか…」と「ChatGPT」を駆使して色々と解決しました。
FC2ブログ 記事データバックアップ&キーワード検索スクリプト
年始に「FC2ブログ バックアップデータ検索プログラム作成」を書いていたので、掲載しておこうかと。
【2021/07/18 追記】
※2021/06/末よりhCaptchaが入り以下の「【記事データバックアップスクリプト】」は動かないものとなりました…
理由はこちら。
【事の始まり】
本ブログには画面左のところに、FC2ブログ公式のキーワード検索プラグインを仕込んでいるのですが(これは若干利便性を上げる改造をしてある)、実は以前から「あれっ?確かこの単語で記事を書いたの見つからないな…」というのが分かっており、騙し騙し使っていたり、「確実に検索するなら、公式のデータバックアップサービスで落としたテキストファイルをgrepした方が早いな…」という感じで運用していました。
ただし、バックアップのファイルフォーマット仕様の場合、「単純なgrepだと色々と調べる際に分かりづらかったり」、「期間検索」や「その結果からカウントしたい」といった事がサクッとできないので、「どーせなら自作してしまうか…」と、キーワード検索スクリプト作ってみたのが事の始まりです。
また、キーワード検索スクリプトを作ったあとに、ついでに「いままでブラウザからFC2ブログの管理画面に行って、そこからバックアップサービスの画面に遷移し、更にそこから全記事をダウンロードという事を手動でやっていた」事をスクリプトで実施するかな…とスクリプトを作ってみました。(ただし、セキュリティ面、環境面で色々と制約あり)
開発言語はPythonです。
【2021/07/18 追記】
※2021/06/末よりhCaptchaが入り以下の「【記事データバックアップスクリプト】」は動かないものとなりました…
理由はこちら。
【事の始まり】
本ブログには画面左のところに、FC2ブログ公式のキーワード検索プラグインを仕込んでいるのですが(これは若干利便性を上げる改造をしてある)、実は以前から「あれっ?確かこの単語で記事を書いたの見つからないな…」というのが分かっており、騙し騙し使っていたり、「確実に検索するなら、公式のデータバックアップサービスで落としたテキストファイルをgrepした方が早いな…」という感じで運用していました。
ただし、バックアップのファイルフォーマット仕様の場合、「単純なgrepだと色々と調べる際に分かりづらかったり」、「期間検索」や「その結果からカウントしたい」といった事がサクッとできないので、「どーせなら自作してしまうか…」と、キーワード検索スクリプト作ってみたのが事の始まりです。
また、キーワード検索スクリプトを作ったあとに、ついでに「いままでブラウザからFC2ブログの管理画面に行って、そこからバックアップサービスの画面に遷移し、更にそこから全記事をダウンロードという事を手動でやっていた」事をスクリプトで実施するかな…とスクリプトを作ってみました。(ただし、セキュリティ面、環境面で色々と制約あり)
開発言語はPythonです。
Python3系にしてやられる…
3月に「アニメ最速放送日抽出スクリプト」を作成した時は気づかなかったのですが、昨年の11月にPythonの動作を全てPython3系に環境を移行した際に、バックグランド(cron)で動いてたスクリプトがエラーになっている事に気が付かず、このブログ(FC2)とは別に利用している無料サーバに対して実行している処理が行われず、とある禁止事項に抵触し、定期的にアカウントが凍結の警告が行われている状況になっていました。
このバックグランド処理は工数かけずに一瞬で作ってしまっていたもので、これを作成していた事を完全に失念しており、「なんか作ったような気がしたけど、作ってなかったのかなぁ~ でも、これまで何年も垢バンされてなかったから、何かしらが動いていた気がしたんだけど…」と、繰り返し警告がくるもの嫌なので、そろそろ対処するか…と、仕方なく別に作った後になって、過去のスクリプトが見つかり、「なんだ、やっぱり作ってあったんじゃん!(# ゚Д゚)」と自分に怒りを覚えるハメに。(^^;
(最初にcrontabでバックグランドの登録情報を確認さえしてれば…ボケててソレに気づくのが遅れたのが敗因)
今回間違って作ってしまったスクリプトはシェルスクリプトだったのですが、過去のものはPython2系のものでした。
どーせ作ってあるのなら、Python3系でメンテナンスするかな…と、今回作成したシェルスクリプトはお蔵入りをして、修正を行った際に2箇所問題が見つかったので、今後何かあったら検索できるように自分の備忘録として書いておこうかと思います。
【(今更)Python2系からPython3系に陥った罠】
(1) 「import commnadsの」廃止。セキュリティ上の問題があり、Python3では
削除されていた。
(2) ftplib(FTPプロトコルクライアント)モジュールのstorbinaryメソッドの挙動が
変わっていた。
これはキチンと調査していないので(する気がない)憶測でものを語っていますが、
どうやらアスキーモードとバイナリーモードがファイルのオープン属性をキチンと
精査している…ようで、メソッド名のとおり、バイナリファイルをオープンして
渡さないと例外を吐いてしまう…というようです。
ファイルのオープンをopen('ファイル名', 'rb')といった形で実行しないとNGでした。
(以前はOKだった)
内部処理を見た限りでは配列処理にするためにコケたように見えましたが、
ちゃんと解読していないので、よくわかりません。
この(2)は結構レアケースなのか、または私の検索が下手なのか、ネットでなかなか同じ現象で困った人に遭遇しませんでした。
(1人の外人さんがStack Overflowのサイトで吠えていただけでした)
「PythonでFTPなんかしねーよ」って事なのかもしれないですが…
(今回忘れてて作成したものもシェルスクリプトもだった位だし)
まぁ、このような失敗は自己啓発に繋がっているところがあるので、こうやって技術力が上がるってことで、良い勉強になりました。
はぁ、こんなので数時間溶けてしまった… 陽が出てくる前に寝ないと。
このバックグランド処理は工数かけずに一瞬で作ってしまっていたもので、これを作成していた事を完全に失念しており、「なんか作ったような気がしたけど、作ってなかったのかなぁ~ でも、これまで何年も垢バンされてなかったから、何かしらが動いていた気がしたんだけど…」と、繰り返し警告がくるもの嫌なので、そろそろ対処するか…と、仕方なく別に作った後になって、過去のスクリプトが見つかり、「なんだ、やっぱり作ってあったんじゃん!(# ゚Д゚)」と自分に怒りを覚えるハメに。(^^;
(最初にcrontabでバックグランドの登録情報を確認さえしてれば…ボケててソレに気づくのが遅れたのが敗因)
今回間違って作ってしまったスクリプトはシェルスクリプトだったのですが、過去のものはPython2系のものでした。
どーせ作ってあるのなら、Python3系でメンテナンスするかな…と、今回作成したシェルスクリプトはお蔵入りをして、修正を行った際に2箇所問題が見つかったので、今後何かあったら検索できるように自分の備忘録として書いておこうかと思います。
【(今更)Python2系からPython3系に陥った罠】
(1) 「import commnadsの」廃止。セキュリティ上の問題があり、Python3では
削除されていた。
(2) ftplib(FTPプロトコルクライアント)モジュールのstorbinaryメソッドの挙動が
変わっていた。
これはキチンと調査していないので(する気がない)憶測でものを語っていますが、
どうやらアスキーモードとバイナリーモードがファイルのオープン属性をキチンと
精査している…ようで、メソッド名のとおり、バイナリファイルをオープンして
渡さないと例外を吐いてしまう…というようです。
ファイルのオープンをopen('ファイル名', 'rb')といった形で実行しないとNGでした。
(以前はOKだった)
内部処理を見た限りでは配列処理にするためにコケたように見えましたが、
ちゃんと解読していないので、よくわかりません。
File "/usr/lib/python3.6/ftplib.py", line 509, in storbinary conn.sendall(buf) |
この(2)は結構レアケースなのか、または私の検索が下手なのか、ネットでなかなか同じ現象で困った人に遭遇しませんでした。
(1人の外人さんがStack Overflowのサイトで吠えていただけでした)
「PythonでFTPなんかしねーよ」って事なのかもしれないですが…
(今回忘れてて作成したものもシェルスクリプトもだった位だし)
まぁ、このような失敗は自己啓発に繋がっているところがあるので、こうやって技術力が上がるってことで、良い勉強になりました。
はぁ、こんなので数時間溶けてしまった… 陽が出てくる前に寝ないと。
「来季何見る?」向けアニメ最速放送日抽出スクリプト
3ヶ月毎にビデオサーバーに来季のアニメのタイトルを突っ込みますが、たまにタイトルがマッチングしないで録画されていない時があって、2話位過ぎてからそれに気が付き、「ノォォォォ!(゜Д゜;ノ)ノ」ってなった事がちょいちょいあるので、放送開始&録画が始まるまで気を抜かないようになってきました。(録っても見ないくせに)
そこで、毎季エアチェックにお世話になっているサイトの一つ「アキバ総研」さんから、最速放送日を出すスクリプトをPythonで書きました。
ライブラリは有名なRequestsとBeautifulSoupを使ってスクレイピングです。
【ソース:anime_title.py】
【出力結果】
CSVで出せれば、後はターミナルからどうにでもなるので、録画が始まる3日前位から各タイトルがEPG(電子番組表)から発見されて、録画予約に登録されているかをモニタリングです。
今季は64本ほどありましたが(本日現在)、最近はネット配信のみとかあるので、その辺は録画できないとして、約40本程予約しました。
見れて5~10本位だろうな。オンタイムで5本弱。録画で5本弱行けたら御の字。
【2021/01/16 追記】
大分前にソースを改造していたことに気が付き、更新版を追記です。
(上記とはまるで変わりました。(^^ゞ)
そこで、毎季エアチェックにお世話になっているサイトの一つ「アキバ総研」さんから、最速放送日を出すスクリプトをPythonで書きました。
ライブラリは有名なRequestsとBeautifulSoupを使ってスクレイピングです。
【ソース:anime_title.py】
import requests
from bs4 import BeautifulSoup
res = requests.get('https://akiba-souken.com/anime/spring/')
soup = BeautifulSoup(res.text, 'html.parser')
divs = soup.find_all('div', {'class': 'itemBox'})
for i in divs:
print(i.a.string + ',' + i.select('div[class="firstDate"]')[0].text)
【出力結果】
アイドリッシュセブン Second BEAT!,最速放送日 2020年4月5日(日)22:30~(TOKYO MX) 天晴爛漫!,最速放送日 2020年4月10日(金)21:30~(AT-X) あの世のすべては、おばけぐみ,最速放送日 2020年4月6日(月)25:00~(千葉テレビ) アルゴナビス from BanG Dream!,最速放送日 2020年4月10日(金)25:25~(毎日放送) アルテ,最速放送日 2020年4月~(放送局未定) イエスタデイをうたって,最速放送日 2020年4月4日(土)25:30~(テレビ朝日) ULTRAMAN,最速放送日 2020年4月12日(日)23:00~(TOKYO MX) : : |
CSVで出せれば、後はターミナルからどうにでもなるので、録画が始まる3日前位から各タイトルがEPG(電子番組表)から発見されて、録画予約に登録されているかをモニタリングです。
今季は64本ほどありましたが(本日現在)、最近はネット配信のみとかあるので、その辺は録画できないとして、約40本程予約しました。
見れて5~10本位だろうな。オンタイムで5本弱。録画で5本弱行けたら御の字。
【2021/01/16 追記】
大分前にソースを改造していたことに気が付き、更新版を追記です。
(上記とはまるで変わりました。(^^ゞ)
シンボリックリンクの一括張り直しスクリプト
一年半前位前に、bashでちょろっと作ったスクリプトに致命的なバグがあったので、Pythonで同じ結果を得ることに。(いや、これも同じバグを孕んでるんだけど。(^^ゞ)
【ソース:ln2.py】
未だにちゃんと調べてないのだけど、コマンド一発でシンボリックリンクの張り替えって
ln -nfs <source> <dest>
で出来るらしいけど、なんか元ファイルを消してから作り直しちゃってる。(^^ゞ
まぁ、やりたい事がサクッとできたから結果オーライで。(^^)
最近は簡単な処理を行う時にはPythonで書くようにしている。REST API叩く実験とか簡単な事だけだけど。
(あと、ここでは書かないようなアングラなソフトを作る時とかw)
【追記】
lnコマンドに「--force」があるのを知らなかったという…(´・ω・`) 情弱や。
【ソース:ln2.py】
#!/bin/sh
# coding: utf-8
""":"
exec python "$0" {1+"$@"}
"""
__doc__ = """The above defines the script's __doc__ string. You can fix it by like this."""
# おまじない終わり
import os
from subprocess import call
import glob
# とりあえずハードコートで指定したディレクトリをターゲットに
target_path = '/home/hoge/contents/data'
# メイン
file_list = [os.path.basename(r) for r in glob.glob('*')]
for file in file_list:
print file
# 元ファイルの削除
os.remove(file)
# 張り直しのパス
source = target_path + '/' + file
call(['ln', '-s', source, '.'])
未だにちゃんと調べてないのだけど、コマンド一発でシンボリックリンクの張り替えって
ln -nfs <source> <dest>
で出来るらしいけど、なんか元ファイルを消してから作り直しちゃってる。(^^ゞ
まぁ、やりたい事がサクッとできたから結果オーライで。(^^)
最近は簡単な処理を行う時にはPythonで書くようにしている。REST API叩く実験とか簡単な事だけだけど。
(あと、ここでは書かないようなアングラなソフトを作る時とかw)
【追記】
lnコマンドに「--force」があるのを知らなかったという…(´・ω・`) 情弱や。
| HOME |