はじめに
Bot Computing/Wiki IoT というのをやっています。これは、PukiWikiのページにかかれたスクリプトをIoTのEdge端末が実行し、実行結果をPukiWikiのページに書き加える、というものです。Edge端末がWikiのページの記述で遠隔操作されるBot となります。これをWiki Botと呼んでいます。
2024年1月には、Raspberry Pi Pico をWiki Botとして使えるようにしました。
その後、Wiki Botのプログラムを Python でも書いて、Raspberry PiでPython版のWiki Botを動かすことができるようになりました。
いままでは、Wiki Botは、PukiWikiのテキストページのみの読み書きを行っていましたが、音声や画像も扱えたら良いなと思っていました。そこで、今回、Wiki Botに音声・画像をWiki ページにuploadする機能を付け加える準備として、PukiWikiのページに
画像ファイルを添付するプログラムを作成することができたので、記録しておきたいと思います。
なお、Wiki Botを作る以前は、PukiWikiのプラグインとして Javaのアプレットを使って、音声や画像をテキストデータに変換してPukiWikiのページに保存することをやっていたのですが、Java アプレットが使えなくなってしまって、それができなくなってしまっていました。
プログラム
Pico Wiki Driver を作った時と同様に、WireSharkでPukiWikiのページでファイルをuploadしたときのpostのデータをダンプ・解析するなどして作成しました。
import requests
from requests_toolbelt import MultipartEncoder
import mimetypes
file_Name = '<uploadする画像などのファイル名>'
file_dir='<uploadするファイルがあるpath>'
file_path=file_dir+file_Name
# MIMEタイプの定義
#XLSX_MIMETYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
MIMETYPE = mimetypes.guess_type(file_path)[0]
print('file_path='+file_path)
# ファイル名とデータの取得
file_Data_Binary = open(file_path, 'rb').read()
# アップロード先のURL
url = '<PukiWikiサーバのURL>'
page = '<ページ名>'
# アップロードするファイルの情報を辞書に格納
files = {'attach_file': (file_Name, file_Data_Binary, MIMETYPE),
'encode_hint': 'ぶ',
'pass': '<adminパスワード>',
'refer': page,
'pcmd': 'post',
'plugin': 'attach'}
m = MultipartEncoder(files)
hx={'Content-Type': m.content_type,
# 'Accept:': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Referer': url+'?'+'plugin=attach&pcmd=upload&page='+page
# 'Accept-Language': 'ja,en;q=0.9,en-GB;q=0.8,en-US;q=0.7'
}
# ファイルのアップロード
response = requests.post(url, data=m, headers=hx)
# レスポンスの表示
print(response.status_code)
print(response.content)
wfile_path=file_dir+'return.html'
result_file= open(wfile_path, 'w')
result_file.write((response.content).decode(encoding='utf-8'))
参考ページ等
以下のページなどを参考にさせていただきました。感謝します。