I want to extract to data via API from catalog.beer.
What I want to doI want to extract following data from catalog.beer.
- "id"
- "style"
- "name"
- "description"
- "abv"
- "ibu"
problem
I have already extract id , name.But I cloud not get "style","description","abv","ibu.I want to extract "style","description","abv","ibu" tie it together "id"
And Sometimes it takes too long and stops.
What I didI run following code at local,Google colab,Pycharm.But It was not working.
What I expect
I'll paste the code, please review the code.
code
import requestsimport base64import csvdef get_beer_details(api_key, beer_id): url = f"https://api.catalog.beer/beer/{beer_id}" encoded_key = base64.b64encode(f"{api_key}:".encode()).decode() headers = {"Authorization": f"Basic {encoded_key}","Accept": "application/json" } response = requests.get(url, headers=headers) if response.status_code == 401: raise Exception("Unauthorized access. Check your API key.") response.raise_for_status() return response.json()def get_all_beers(api_key): url = "https://api.catalog.beer/beer" encoded_key = base64.b64encode(f"{api_key}:".encode()).decode() headers = {"Authorization": f"Basic {encoded_key}","Accept": "application/json" } all_beers = [] cursor = None while True: params = {} if cursor: params['cursor'] = cursor response = requests.get(url, headers=headers, params=params) response.raise_for_status() data = response.json() all_beers.extend(data['data']) if not data.get('has_more', False): break cursor = data.get('next_cursor') return all_beersdef save_beers_to_csv(beers, file_path): keys = ['id', 'name', 'style', 'description', 'abv', 'ibu'] with open(file_path, mode='w', newline='', encoding='utf-8') as file: writer = csv.DictWriter(file, fieldnames=keys) writer.writeheader() for beer in beers: writer.writerow(beer)# API KEYapi_key = "My API key" # get to beer infobasic_beer_info = get_all_beers(api_key)# get to deatail beer infodetailed_beer_info = []for beer in basic_beer_info: beer_id = beer['id'] beer_details = get_beer_details(api_key, beer_id) detailed_beer_info.append({"id": beer_id,"name": beer_details.get('name'),"style": beer_details.get('style'),"description": beer_details.get('description'),"abv": beer_details.get('abv'),"ibu": beer_details.get('ibu') })# save data to csv filecsv_file_path = '/Users/iidahikaru/Desktop/detailed_beer_data.csv' # ファイルパスをローカルに変更save_beers_to_csv(detailed_beer_info, csv_file_path)print("detail beer info was saved detailed_beer_data.csv ")
result
ID | Beer name | style | description | abv | ibu |
---|---|---|---|---|---|
ed8d5bcd-9016-4954-9f4c-81855dbad55a | KIRIN beer | null | null | null | null |
64cd7a20-ebf3-4358-bacf-180d1b7d9b96 | Chang beer | null | null | null | null |