SoniPana
@SoniPana

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

[misskey]Requestsを用いてドライブにファイルをアップロードしたい

解決したいこと

PythonでMisskeyのドライブに「Requestsを用いて」ファイルをアップロードしようとしています。

↑のドキュメントを読んでも情報が少なくてどうすれば正常にアップロードできるのか分からなくなったので質問しました。


↑のサイトを参考にMisskey.pyでのアップロードは成功しています。

現在のコード(動作しません)

import requests

headers = {'Content-Type': 'application/json'}
body = {
  "i" : "{トークン}",
  "file" : open("image.png", "rb")
}
r = requests.post('https://misskey.io/api/drive/files/create', headers=headers, json=body)
print(r.text)

参考サイト

0

1Answer

「↑のドキュメントを読んでも情報が少なくてどうすれば正常にアップロードできるのか分からなくなったので質問しました。」

ええっと・・・APIがあるのにあえて「requestsを使ってアップロードしたい」ということですよね?

現状を分析すると

  • requestsを使ってmisskey.ioにアップロードしたい
    だけど
  • misskey apiのドキュメントばっかりにらめっこしててもらちがあかない状態に陥ってしまった

ということですよね?

なら、本家本元のrequestsのドキュメントを読むべきではないでしょうか

というわけで、requests のドキュメントは下記です。

上を見ると、ファイルのアップロードには、files パラメータを使う必要があるということがわかります。

files – (optional) Dictionary of 'filename': file-like-objects for multipart encoding upload.

と書いてあるので、この通りに従えばよいと思います。

というわけで、答えは下記になると思います。

import requests
token = トークン
filepath = アップロードしたいファイルのパス
filename = 適当なファイル名

# ファイルを確実にクローズさせる作法にしたがう
with open(filepath, 'rb') as f:
    params = {
        'i' : token,
    }
    r = requests.post(
        'https://misskey.io/api/drive/files/create', 
        data=params,
        files={filename : f}
    )
    print(r.text)

※headers = {'Content-Type': 'application/json'}は不要です。

0Like

Comments

  1. @SoniPana

    Questioner

    @Qnoir
    ご回答いただきありがとうございます。
    無事にファイルのアップロードに成功しました。

    requestsのドキュメントの存在をすっかり忘れていました...
    以後気をつけます。

    お忙しい所本当にありがとうございました!

Your answer might help someone💌