<jupyter_start><jupyter_text>APIs, Libraries, Modules -> "Requests"Gezielt und automatisiert Daten im Web auslesen Die Python-Library erlaubt es, automatisiert URLs zu besuchen und gezielt Inhalte herauszulesen. Der Untertitel in [der Dokumentation](http://docs.python-requests.org/en/master/) fasst eigentlich am besten zusammen, was ```requests``` ist: "HTTP for Humans." HTTP steht für Hyper Text Transfer Protocol und ist die Technologie, die <NAME> im Jahr 1990 erfunden hat. Ohne HTTP kein Internet. Mit ```Requests```können wir Websites viel genauer befragen, als wir das mit Wget letzte Woche kennengelernt haben.   Unsere Imports<jupyter_code>import requests
import pandas as pd #diese Library werdet ihr am Mittwoch und Donnerstag viel genauer anschauen<jupyter_output><empty_output><jupyter_text>Zur Dokumentation von ```requests``` geht es [hier lang](http://docs.python-requests.org/en/master/).  Notes In einer ersten Übung arbeiten wir mit [der API des USGS](https://earthquake.usgs.gov/fdsnws/event/1/methods) arbeiten. Für die meisten API muss man sich heutezutage eine eigene API-Key kreieren. Doch diese API braucht keine Keys. Deshalb ist es ein gutes Kennenlernbeispiel. Falls Probleme mit dem Output auftauchen, hier ein Work around für die Meldung, dass der Output limitiert wurde. [Reconfigure line output](https://stackoverflow.com/questions/43288550/iopub-data-rate-exceeded-when-viewing-image-in-jupyter-notebook) and [opening stuff from the command line](https://stackoverflow.com/questions/16344709/how-to-open-a-file-from-the-command-line-with-a-specified-program)  Dokumentation  Bevor man mit deiner API arbeitet, lohnt es sich immer zuerst, die [Dokumentation](https://earthquake.usgs.gov/fdsnws/event/1/parameters) anzuschauen.   Erste Abfragen Kleinere Abfrage. Wieviele Erdbeben hat es in einem bestimmten Zeitraum gegeben?<jupyter_code>url = 'https://earthquake.usgs.gov/fdsnws/event/1/'
response = requests.get(url)
response
response.text<jupyter_output><empty_output><jupyter_text>Wieviele hat es letzte Nacht von x bis x gegeben? Dafür müssen wir in der Dokumentation Time nachfragen.<jupyter_code>url = 'https://earthquake.usgs.gov/fdsnws/event/1/count?starttime=2020-01-01&endtime=2020-09-30'
response = requests.get(url)
response.text<jupyter_output><empty_output><jupyter_text>Wegen Zeitverschiebung Zeit anpassen.<jupyter_code>url = 'https://earthquake.usgs.gov/fdsnws/event/1/count?starttime=2020-01-01T24:00:00&endtime=2020-09-30T08:00:00'
response = requests.get(url)
response.text<jupyter_output><empty_output><jupyter_text>Grosse, komibinierte Abfrage Details zu allen Erbeben in den über drei Tage, 18-7-2017 bis 31-7-2017.<jupyter_code>url1 = 'https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson'
urlzeit = '&starttime=2020-09-01&endtime=2020-09-27'
url1 + urlzeit
response = requests.get(url1 + urlzeit)
response.json()<jupyter_output><empty_output><jupyter_text>Alle Erbeben mit den ungefähren Koordinaten von Mexiko. [Hier könnte man die ungefähr nachschlagen.](http://www.latlong.net/)<jupyter_code>urlloc = '&minlatitude=13&maxlatitude=33&minlongitude=-120&maxlongitude=-85'
url1+urlzeit+urlloc
response = requests.get(url1+urlzeit+urlloc)
response.text<jupyter_output><empty_output><jupyter_text>Dieser Wulst lässt sich aber ziemlich schwer lesen. Deshalb müssen wir das zuerst umformatieren und dann verstehen, wie das ganze strukturiert ist.<jupyter_code>response.json()
dct = response.json()<jupyter_output><empty_output><jupyter_text>Um sicher zu gehen, prüfen wir nochmals den Datentyp.<jupyter_code>type(dct)
len(dct)<jupyter_output><empty_output><jupyter_text>Schauen wir uns alle keys und values an<jupyter_code>for key in dct:
    print(key)<jupyter_output><empty_output><jupyter_text>Features interessiert uns.<jupyter_code>dct['features']
type(dct['features'])
dct['features'][0]
dct['features'][0]<jupyter_output><empty_output><jupyter_text>Schauen wir uns das erste Element an<jupyter_code>for key in dct['features'][0]:
    print(key)
dct['features'][0]['properties']<jupyter_output><empty_output><jupyter_text>Lesen wir folgendes aus:1. Type2. Magnitude4. Örtlichkeit5. Time<jupyter_code>earthquakes = []

for elem in dct['features']:
    
    t = elem['properties']['type']
    m = elem['properties']['mag']
    p = elem['properties']['place']
    tm = elem['properties']['time']
    
    mini_dict = {'Type': t,
                 'Mag': m,
                 'Place': p,
                 'Time': tm}
    
    earthquakes.append(mini_dict)
earthquakes[:3]<jupyter_output><empty_output><jupyter_text>Erste Erfahrung mit Pandas<jupyter_code>pd.DataFrame(earthquakes)
df = pd.DataFrame(earthquakes)<jupyter_output><empty_output><jupyter_text>Speichern wir das ab.<jupyter_code>df.to_csv('erdbeben.csv')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11637572734829593, 'fraction_numerical': 0.025561097256857856, 'mean_word_length': 6.281391830559758, 'pattern_counts': {'":': 0, '<': 58, '<?xml version=': 0, '>': 59, 'https://': 8, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '14', 'dir': 'jupyter-structured-clean-dedup', 'id': '462881', 'license': 'MIT', 'n_tokens_mistral': 1817, 'n_tokens_neox': 1759, 'n_words': 365, 'path': '06 APIs, Scraping I/.ipynb_checkpoints/01 APIs, Python Modules, Fokus Requests-checkpoint.ipynb', 'repo_name': 'Tamibobi/kurs_21_22', 'size': '4821'}