1.目的
RapidgatorのAPIを用いて、Pythonでファイルをアップロードする。
API - Rapidgator.com

2.方法
環境は、以下の通り。
- Rapidgatorアカウント
- Python実行環境(3.7x)
3.コード
結構前に作ったものなんで… ネストが深くて読み解くの面倒なんで、解説はナーシ
import requests import hashlib import os import json import time USER_NAME = "*****@yahoo.co.jp" # サーバーのユーザー名 PASSWORD_LOGIN = "*****" # ログインパスワード XLSX_MIMETYPE = 'application/zip' # ファイルタイプ ZIP形式指定のままでも他のファイル大丈夫っぽい # アップするファイルのMD5ハッシュ計算 def calcMD5hash(upload_src_path): with open(upload_src_path, 'rb') as file: fileData = file.read() hashMD5 = hashlib.md5(fileData).hexdigest() return hashMD5 # ラピゲにログインする def loginToRapidgator(): url = 'https://rapidgator.net/api/v2/user/login' req = requests.get(url, params={'login': USER_NAME, 'password':PASSWORD_LOGIN}) req.encoding = "UTF-8" return json.loads(req.text) # ラピゲにアップする # login_result... ログインAPIの返り値(loginToRapidgatorの出力) # upload_src_path... アップするファイルのパス # hashMD5... アップするファイルのMD5ハッシュ # size... アップするファイルのサイズ def uploadToRapidgator(login_result, upload_src_path, hashMD5, size): isSuccess = False downloadURL = "" #アップロードリンクのリクエスト url = 'https://rapidgator.net/api/v2/file/upload' req = requests.get(url, params={ 'token': login_result["response"]["token"], 'name':upload_src_path, 'hash':hashMD5, 'size': size }) req.encoding = "UTF-8" UL_req_result = json.loads(req.text) if UL_req_result["status"] == 200: #アップロードリンクへアップロード fileDataBinary = open(upload_src_path, 'rb').read() files = {'file': (upload_src_path, fileDataBinary, XLSX_MIMETYPE)} if UL_req_result["response"]["upload"]["file"]: #既にアップロードされてる場合 isSuccess = True downloadURL = UL_req_result["response"]["upload"]["file"]["url"] else: url = UL_req_result["response"]["upload"]["url"] print("Start") req = requests.post(url, files=files) req.encoding = "UTF-8" upload_result = json.loads(req.text) if upload_result["status"]==200: #アップロード状態取得 isUploading = True while isUploading: url = 'https://rapidgator.net/api/v2/file/upload_info' req = requests.get(url, params={ 'token': login_result["response"]["token"], 'upload_id': UL_req_result["response"]["upload"]["upload_id"] }) req.encoding = "UTF-8" upload_info_result = json.loads(req.text) state = upload_info_result["response"]["upload"]["state"] if state==0 or state==1: print("Uploading...") time.sleep(1) elif state==2: print("Completed") isUploading = False isSuccess = True downloadURL = upload_info_result["response"]["upload"]["file"]["url"] else: #Fail isUploading = False if isSuccess: return_value = { "isSuccess": True, "url": downloadURL } else: return_value = { "isSuccess": False, } return return_value #ファイルをラピゲにアップする # upload_src_path... アップするファイルのパス def Upload(upload_src_path): login_result = loginToRapidgator() hashMD5 = calcMD5hash(upload_src_path) size = os.path.getsize(upload_src_path) if login_result["status"]==200: upload_result = uploadToRapidgator(login_result, upload_src_path, hashMD5, size) if upload_result["isSuccess"]: return_value = { "isSuccess":True, "downloadURL": upload_result["url"] } else: return_value = { "isSuccess":False } return return_value #実行 #print(Upload("test.txt"))
4.実行結果
以下に実行結果としてPythonコンソールとRapidgator上のファイルマネージャを示します。


5.課題・考察・感想
以前作ったものを載せただけ。でもせっかくAPIの内容が充実してるから、アップロードだけじゃなくて色々包括的な操作できるクラスを作っても良かったかと思う。削除は手動とか面倒だし。
Last Modified : 2021-10-17