Feishu 開発プラットフォームが提供する API インターフェイスを使用して、多次元テーブル データをクロールし、ローカルに保存します。スプレッドシート データをクロールすることもできます。ただし、スプレッドシートに関連する API は、使用時にデバッグを提供しません。スプレッドシートを次のように変換します。多次元テーブルです。 ビジネス ロジックを完成させるためのコードを記述するこの種の API ドキュメントを見たのは初めてです。また、私自身 Java 言語を使用していますが、Python にはあまり詳しくありません。Python コードを書くのはあまり得意ではありません。 csdn では Feishu API についての投稿が少ないので(当時検索しましたが目的のものが見つかりませんでした)、このブログを書きました(これも初めてでした)。皆さんの参考にしてください。何か質問がある場合は、修正していただければ幸いです。 一般的なプロセス: 1: 最初のステップは、Feishu 開発者バックエンドで独自のアプリケーションを作成し、対応する権限を付与することです 。2 : 開発ドキュメント、対応する API、それらのパラメーターの意味を読み、デバッグ後、書かれたコード (応答本文) があり、必要なものを取得するコード ロジックを作成します。コードの一般的なプロセス: コンソールは関連する情報を読み取ります 。パラメータ、ローカル設定ファイルの暗号化と書き込み、設定の読み取り ファイルの関連パラメータ、情報の取得、パラメータの受け渡し、データのクローリング import http.client import json import hashlib from grammar import TransferParametersAndEncryption from urllib.parse import urlparse 、 parse_qs import hashlib import xml.etree.ElementTree as ET import Base64 #Encryption: md5 暗号化は不可逆です。ここでは他の暗号化方法、AES または bcrypt、sm4 を使用する必要がありますが、報告すると問題が発生します。Def encrypt(parameter) をここで改善する必要があります : # パスワード暗号化に MD5 を使用します。 他のより安全な暗号化アルゴリズムを選択することもできます。 hash_object = hashlib.md5(parameter.encode()) return hash_object.hexdigest() #パラメータを渡す: テーブルの情報を XML に書き込みます def input_parameters(): # Get app_id, app_secret, url path = input("設定ファイルが保存されているアドレス") user_appp_id = input("app_idを入力してください ") user_app_secret = input("app_secretを入力してください ") url = input("多次元テーブルのURLアドレス: " ) table_name = input(" クロールするテーブル名を入力してください") # 暗号化された appid,appSecret encrypted_app_id = encrypt(user_appp_id) encrypted_app_secret = encrypt(user_app_secret) # XML ドキュメントを作成 root = ET.Element('table_info') パスワード要素.テキスト = テーブル名 # 创建XML文档对オブジェクト user_element = ET.SubElement(root, 'Path') user_element.text = path #先使用原来の明文 password_element = ET.SubElement(root, 'User_app_id') #password_element.text = encrypted_app_idpassword_element.text = user_app_idpassword_element = ET。 SubElement(root, 'User_app_secret') # パスワード要素.テキスト = encrypted_app_secret パスワード要素. テキスト = ユーザー アプリ_シークレット パスワード要素 = ET.SubElement(ルート, 'Url')パスワード要素.テキスト = url パスワード要素 = ET.SubElement(ルート, 'テーブル名') ツリー = ET.ElementTree(root) # 将XML文档を文件treeに保存する .write(path, encoding='utf-8',xml_declaration=True) print("ユーザー名とパスワードは XML 設定ファイルに保存されています。") #xml 内の情報を取得し、辞書として返します def get_parameters(): # app_id、app_secret、url パスを取得します = input("クロールに必要ですdata 設定ファイルのアドレス") tree = ET.parse(path) root =tree.getroot() path = なし user_appp_id = なし user_app_secret = なし url = なし table_name = なし table_info_dir = {} ルートの子の場合: elif child.tag == 'Url': table_info_dir["URL"] = child.text if child.tag == 'Path': table_info_dir["Path"] = child.text elif child.tag == 'User_appp_id': table_info_dir["User_app_id"] = child.text elif child.tag == 'User_app_secret': table_info_dir["User_app_secret"] = child.text elif child.tag == 'Table_name': table_info_dir["Table_name"] = child.text # 解密暗号 # パスワード = decrypt_password(encrypted_password) return table_info_dir #获取access_token def accss_token(app_id,app_secret): conn = http.client.HTTPSConnection("open.feishu.cn") payload = json.dumps({ "app_id": app_id、 「app_secret」:app_secret }) ヘッダー = { 'Content-Type': 'application/json' } conn.request("POST" 、「/open-apis/auth/v3/app_access_token/internal」、ペイロード、ヘッダー) res = conn.getresponse() data = res。read() # jsonにフォーマットする data_dir = json.loads(data.decode("utf-8")) print(data_dir["app_access_token"]) return data_dir['app_access_token'] #App_token を取得 #API 呼び出しを使用するのが最善です。返される結果は受信と同じです。多次元テーブル名が判断に使用され、対応するトークンが取得されますが、その API 呼び出しは null を返します。#ここでは、受信 接続の URL の値を使用して、 def get_app_token (url) をインターセプトします。 url.split ('/')[-1].split('?')[0] if app_token: print(app_token) return app_token else: return None #Get table_id #これは URL を通じてインターセプトされるか、または公式 API table_param = query_params。get('テーブル') if table_param: #受信したシート ID が tableID ではなくサブテーブル名の場合は、API を通じて辞書を取得し、対応する値を取得できます。それを辞書に入れ、キー tableID を通じて対応する値を返します。 def get_table_id(url): parsed_url = urlparse(url) query_params = parse_qs(parsed_url.query)ヘッダー) res = conn.getresponse() table_id = table_param[0] print(table_id) return table_id else: print("テーブル パラメータが URL に見つかりません。") return None def get_table_idByName(url,tableName,app_id,app_secret): conn = http.client.HTTPSConnection(" open.feishu.cn") payload = '' headers = { 'Authorization': 'Bearer '+accss_token(app_id,app_secret) } conn.request("GET", "/open-apis/bitable/v1/apps/" +get_app_token(url)+"/tables?page_size=100"、ペイロード、ヘッダー) data = res.read() data_dir = json。loads(data) table_info_list = data_dir["data"]["items"] table_name = "内容型" #print(data_dir["data"]["items"]) table_info_dir = {} table_info_list の table_info の場合: table_info_dir[table_info["name"]] = table_info["table_id"] print(table_info_dir[tableName]) return table_info_dir[ tableName] #本地文件への書き込み def write_data(url,tableName,app_id,app_secret): conn = http.client.HTTPSConnection("open.feishu.cn") payload = '' path = input("捕取データ保存的地址 ") headers = { 'Authorization': 'Bearer '+accss_token(app_id,app_secret) } conn.request("GET","/open-apis/bitable/v1/apps/"+get_app_token(url)+"/tables/"+get_table_idByName(url,tableName,app_id,app_secret)+"/records?page_size=500"、ペイロード、ヘッダー) res = conn.getresponse() data = res.read() #print(data.decode("utf-8")) #print(data['data']) #json に フォーマット data_dir=json.loads(data. decode("utf-8")) #データのリスト。その中の各レコードは json に保存されます。 value_list=data_dir['data']["items"] #出力ビューリスト #print(value_list) count=0 for kv in value_list: result = "" def run(): 入力パラメータ() 、kv['fields'].items() の値: 結果 += f"{キー}: {値}|^|" open(path , 'a') をファイルとして使用: # 文件路径は完全な绝对路径 "/Users/username/Documents/output.txt" file.write(result) file.write("\n") print(result) ) count+=1 table_info_dir = get_parameters() print(table_info_dir) write_data(table_info_dir['Url'],table_info_dir['Table_name'],table_info_dir['User_appp_id'],table_info_dir['User_app_secret']) if __name__ == '__main__' : URL = 'https://hatuxjd72ne.feishu.cn/base/MvPfbLKcsaHSoUsGJdqcSi0Xnde?table=tbldgaotuABaSQUT&view=vewovUyg71' #path = 'D:/migu/data/data2.txt' tableName='page_id' #write_data(url,path,tableName) run() #書き込みデータ(t)
Python は、Feishu 開発プラットフォーム API を使用して、多次元テーブルまたはスプレッドシートからデータをクロールし、ローカル ファイルに書き込みます。
おすすめ
転載: blog.csdn.net/m0_71695472/article/details/131856404
おすすめ
ランキング