0 Daumen
209 Aufrufe

Ich möchte ab einem bestimmten Datum Artikel aus so vielen Quellen auf der ganzen Welt importieren.

import requests
url = ('https://newsapi.org/v2/top-headlines?'
    'country=us&'
    'apiKey=de9e19b7547e44c4983ad761c104278f')
response = requests.get(url)

response_dataframe = pd.DataFrame(response.json())

articles = {article for article in response_dataframe['articles'] if article['publishedAt'] == '2019-01-04T11:30:00Z'}
print(articles)

Aber ich habe :

---------------------------------------------------------------------------
TypeError                               Traceback (most recent call last)
<ipython-input-84-0f21f2f50907> in <module>
    2 response_dataframe['articles'][1]['publishedAt']
    3
----> 4 articles = {article for article in response_dataframe['articles'] if article['publishedAt'] >= '2018-01-04T11:30:00Z'}
    5 print(articles)

<ipython-input-84-0f21f2f50907> in <setcomp>(.0)
    2 response_dataframe['articles'][1]['publishedAt']
    3
----> 4 articles = {article for article in response_dataframe['articles'] if article['publishedAt'] >= '2018-01-04T11:30:00Z'}
    5 print(articles)

TypeError: unhashable type: 'dict'
Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Lösung des Problems:

Dein Ziel ist das Filtern von Artikeln basierend auf einem bestimmten Datum, aber es gibt einige Probleme in deinem Ansatz, die den TypeError verursachen. Hier sind die Schritte, um dein Problem effektiv zu lösen:

1. Problemverständnis: Das Problem tritt auf, weil Sets ({}) nur unveränderliche (immutable) Datentypen enthalten dürfen. Dictionaries (dict) sind veränderlich (mutable) und können daher nicht direkt in einem Set gespeichert werden. Der Fehler "unhashable type: 'dict'" zeigt an, dass du versuchst, ein dict-Element in einem Set zu speichern.

2. Lösungsansatz: Um die Artikel zu filtern, könntest du eine Liste anstelle eines Sets verwenden. Listen können veränderliche Objekte enthalten, darunter auch Dictionaries.

3. Verbesserung des Codes: Es ist auch zu beachten, dass du ein Datenframe aus der Antwort erstellst, was nicht der effizienteste Weg ist, mit Json-Daten zu arbeiten, die in diesem Fall als Nested-Dictionaries vorliegen. Du kannst direkt auf die Daten zugreifen, ohne sie in einen DataFrame zu konvertieren.

Hier ist eine verbesserte Version des Codes:

python
import requests
import pandas as pd

url = ('https://newsapi.org/v2/top-headlines?'
       'country=us&'
       'apiKey=de9e19b7547e44c4983ad761c104278f')
response = requests.get(url)

# Direktes Arbeiten mit den JSON-Daten
data = response.json()

# Ein Datum für den Filter definieren
filter_date = '2018-01-04T11:30:00Z'

# Eine Liste zur Speicherung gefilterter Artikel verwenden
articles = [article for article in data['articles'] if article['publishedAt'] >= filter_date]

print(articles)


Wichtige Hinweise:

- Achte darauf, dass die API-URL und der API-Key in deinem echten Projekt geheim bleiben sollten und nicht öffentlich geteilt werden, um Missbrauch zu meiden.
- Vergewissere dich, dass der API-Key, den du verwendest, gültig und nicht abgelaufen ist.
- Die Filterung basiert auf der Annahme, dass das Datum im 'YYYY-MM-DDThh:mm:ssZ' Format angegeben ist. Stelle sicher, dass das Filterdatum im richtigen Format für eine korrekte Vergleichsoperation vorliegt.

Durch die Nutzung von Listen anstelle von Sets vermeidest du das Problem mit unhashable Typen, und die direkte Arbeit mit Json-Daten macht deinen Code effizienter für diesen spezifischen Anwendungsfall.
Avatar von 4,6 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community