iT邦幫忙

1

多個APIKey訪問服務器取資料

smr 2023-03-02 08:09:161004 瀏覽
  • 分享至 

  • xImage

架構:給服務器APIKey,取得資料計算後,呈現在GoogleSheet
現況:服務器一次僅能接受一組APIKey。我目前使用兩個陽春方法,(1)在相同Python程式
改APIKey,(2)每一個APIKey都寫一個Python程式。
期待:希望可以在一個Python程式中,放進所有的APIKey。爬文有看到將APIKey放在config裡頭,或者import asyncio,但看不懂,請教前輩解法。感恩。

froce iT邦大師 1 級 ‧ 2023-03-02 08:56:42 檢舉
1. 放進config裡面是為了把設定和程式分離出來,讀進去程式後,用個for迴圈就可以逐條讀取了。
2. asyncio是為了改善逐條讀取的網路等待時間,算是優化程式效能,看不懂不要用就好。
ccutmis iT邦高手 2 級 ‧ 2023-03-02 09:53:04 檢舉
asycnio 可以拆成 async(非同步) IO(輸入輸出或稱存取) 從字面上就知道它是用來解決 大量IO的一個模組。

舉個例如果你主管讓你爬一百個網頁,一個網頁等五秒就好,你要花五百秒才能爬完,像這種情況使用 asyncio 模組它可以在爬第一個網頁到等待時跳去爬第二個網頁,第二個網頁開始等待時再跳到第三個網頁... 利用類似的機制縮短大量IO等待的時間,你要先知道原理再去使用它,以免將來不小心踩到自己埋過的地雷。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
alien663
iT邦研究生 3 級 ‧ 2023-03-02 09:08:06

你沒有講清楚API key和服務之間的關係,看你的描述,我猜測可能有兩種情況

  1. 一個服務多個API key,透過切換API key來提高服務使用上限
  2. 多個服務多個API key,一個服務只會對應一個API key

第1種狀況

將API key存在list中,使用random去取API key,並加上"達到上限"的判斷機制

import random
apikeys = ["A", "B", "C", "D"]
for i in range(10):
    print(apikeys[random.randint(0, len(apikeys)-1)])

第2種狀況

將API key存在dic中,不同服務對應不同API key,同時對應不同function

def Service1(data):
    print(data)
    
def Service2(data):
    print(data)
    
def Service3(data):
    print(data)
    
apikeys = {
    "Service1": "Key1",
    "Service2": "Key2",
    "Service3": "Key3"
}

Service1(apikeys["Service1"])
Service2(apikeys["Service2"])
Service3(apikeys["Service3"])

將API key存在另外的config中,目的是為了讓程式跟資料分開,當程式關閉又再打開時,可以根據config的結果接著上次的行為繼續進行,是非常常見的方法,不過不用拘泥於格式,只要另外開檔案儲存資料就可,只要你開心,txt都沒問題,我自己就會直接使用json檔案存類似的config資料。

import json
config = {}
with open("settings.json", 'r') as fp:
    config = json.load(fp)
print(config)

我要發表回答

立即登入回答