Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 14011

I want to extract to data via API from catalog.beer [closed]

$
0
0

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

IDBeer namestyledescriptionabvibu
ed8d5bcd-9016-4954-9f4c-81855dbad55aKIRIN beernullnullnullnull
64cd7a20-ebf3-4358-bacf-180d1b7d9b96Chang beernullnullnullnull

Viewing all articles
Browse latest Browse all 14011

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>