MotionEye, MotionEye .eo post data cannot be of type str! 直し方

MotionEyeでDropboxにアップロードしようとしたらこのエラーが出てハマった!なんとか解決したので、さらす。

MotionEyeもMotionEye.eoも同じやり方でOK!

Accessing the upload service failed: POST data should be bytes, an iterable of bytes, or a file object. it cannot be of type str!

エラー:MotionEyeは文字列でAuthorization keyを受け取れない。

これは、ロボコンのリモコンプログラムをpyhon2からpython3にしたときに出くわしたことがある。こちらを参考

python2と3でのHTTP POST/GETリクエストの違い

MotionEyeの変更

google先生とわしのカンによりuploadservices.pyがわるいんじゃね?カン言うより、そのままんまのお名前。

  • sudo find / -name ‘uploadservices.py’

どこですか?わしのは、ここにあったで。

/usr/local/lib/python3.9/dist-packages/motioneye

変更前にオリジナルをコピーしとこ。

  • sudo cp /usr/local/lib/python3.9/dist-packages/motioneye/uploadservices.py /usr/local/lib/python3.9/dist-packages/motioneye/uploadservices.py.org

これを変更。わしはnanoと言うEditorじゃ。

  • sudo nano /usr/local/lib/python3.9/dist-packages/motioneye/uploadservices.py

クラスDropboxを見つけ、以下の変更を加える。(ctrl+wでDropboxを検索)

class Dropbox(UploadService):
NAME = ‘dropbox’

AUTH_URL = ‘https://www.dropbox.com/oauth2/authorize’
TOKEN_URL = ‘https://api.dropboxapi.com/oauth2/token’

ソースを確認しながら、そのまま下へスクロールしたら、test_accessがある。

def test_access(self):
body = {
‘path’: self._clean_location(),
‘recursive’: False,
‘include_media_info’: False,
‘include_deleted’: False,
}

body = json.dumps(body)
headers = {‘Content-Type’: ‘application/json’}

近くなってきたで。もう少しスクロールしてrequestを発見!bodyをエンコードしたってくれ。赤字の変更をする。

try:
#元 self._request(self.LIST_FOLDER_URL, body, headers)
self._request(self.LIST_FOLDER_URL, body.encode(), headers)
return True

変更を保存(ctrl+s,ctrl+x)したら

MotionEyeのリスタート

  • sudo systemctl restart motioneye

サービスの状態を確認

  • sudo systemctl status motioneye

通常、こちらも変更する必要あり

参考まで

以上



2件のコメント

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です