毎日、公開されているTableauダッシュボードで利用可能なデータをダウンロードする必要があります。対象のパラメーター(時系列頻度、時系列間隔など)を定義した後、ダッシュボードでシリーズをダウンロードできます。
PythonまたはRを使用して、これらのシリーズのデータベースへのダウンロードを自動化できれば、私の生活はかなり楽になります。ページで行われたリクエストを分析しようとしましたが、それ以上進むことはできませんでした。このプロセスを自動化する方法はありますか?
ダッシュボード:https://tableau.ons.org.br/t/ONS_Publico/views/DemandaMxima/HistricoDemandaMxima?:embed = y&:showAppBanner = false&:showShareOptions = true&:display_count = no&:showVizHome = no
この答えは、に似ているこのいずれかが、最初のURLのページやタブローのベースURLが異なります。プロセス/アルゴリズムは基本的に同じですが、手順を詳しく説明します。
グラフィックは、APIの結果からJSで生成されます。
POST https://tableau.ons.org.br/ROOT_PATH/bootstrapSession/sessions/SESSION_ID
SESSION_IDパラメーターは、(とりわけ)tsConfigContainer
iframeの構築に使用されるURLのtextareaにあります。
tsConfigContainer
たくさんのjson値を持つidのtextareaがありますsession_id
およびルートパスを抽出します(vizql_root
)https://tableau.ons.org.br/ROOT_PATH/bootstrapSession/sessions/SESSION_ID
とsheetId
、フォームデータ等をコード:
import requests
from bs4 import BeautifulSoup
import json
import re
url = "https://tableau.ons.org.br/t/ONS_Publico/views/DemandaMxima/HistricoDemandaMxima"
r = requests.get(
url,
params= {
":embed":"y",
":showAppBanner":"false",
":showShareOptions":"true",
":display_count":"no",
"showVizHome": "no"
}
)
soup = BeautifulSoup(r.text, "html.parser")
tableauData = json.loads(soup.find("textarea",{"id": "tsConfigContainer"}).text)
dataUrl = f'https://tableau.ons.org.br{tableauData["vizql_root"]}/bootstrapSession/sessions/{tableauData["sessionid"]}'
r = requests.post(dataUrl, data= {
"sheet_id": tableauData["sheetId"],
})
dataReg = re.search('\d+;({.*})\d+;({.*})', r.text, re.MULTILINE)
info = json.loads(dataReg.group(1))
data = json.loads(dataReg.group(2))
print(data["secondaryInfo"]["presModelMap"]["dataDictionary"]["presModelHolder"]["genDataDictionaryPresModel"]["dataSegments"]["0"]["dataColumns"])
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加