Python中的REST调用

0 投票
1 回答
769 浏览
提问于 2025-04-18 04:47

我正在尝试写一个脚本,把我现有的数据库迁移到Firebase。我的数据是存储在JSON格式里的,我想我可以直接提取这些JSON数据,然后通过POST请求把它们发送到Firebase。

def Post_And_Recieve_JSON(url, data, headers):
    print("Compiling query...")
    Post_And_Recieve_JSON.url = url
    Post_And_Recieve_JSON.headers = headers
    Post_And_Recieve_JSON.data = (data)

    print("Sending request...")
    request = urllib.request.Request(url=url, data=data,headers=headers)
    print("Recieving response...")
    response = urllib.request.urlopen(request)

    print("Reading response...")
    response_data = response.read()
    print("Converting into usable format...")
    response_data_JSON = json.loads(response_data.decode(encoding='UTF-8'))

    return response_data_JSON

for all_users in existing_database:
    full_data.append(Post_And_Recieve_JSON(...)

for item in full_data:
    url = 'firebaseurlhere ' + item['profileId'] + '.json'
    data = json.dumps(item).encode('ascii')
    Post_And_Recieve_JSON(url, data, headers)

这里的full_data是我从现有数据库中正确提取出来的一系列JSON对象。

但是我遇到了一个错误:“http.client.BadStatusLine: ''”

1 个回答

0

我用这个Firebase的Python库解决了这个问题,链接在这里:http://ozgur.github.io/python-firebase/

我用pip3来安装这个库。我希望我能像处理其他REST调用那样简单,而不是需要一个新的库。

full_data = []
from firebase import *
firebase = firebase.FirebaseApplication('https://secret_url.firebaseio.com/', None)

for id in id_list:
    print(str(id))
    url = 'from_url'
    try:
        result = firebase.put('/users/ ' + str(id) + '/',    data=Post_And_Recieve_JSON(url, None, headers)["payload"], name='Data')
    except:
        print('Skipping a user')

撰写回答