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件のコメント