11from enrichers import Enrichment
2- from utils import logger
2+ from utils import (
3+ logger ,
4+ req_get ,
5+ )
36
47
58class Wikidata (Enrichment ):
@@ -11,29 +14,32 @@ def search(self) -> dict:
1114 # Fetches 3 results based on _clean_facility_name (not exact name). todo: needs adjustment.
1215 # Falls back to first result (usually truncated, eg. county)
1316 search_name_fallback = self ._clean_facility_name (facility_name )
17+ self .resp_info ["enrichment_type" ] = "wikidata"
1418 logger .debug ("Searching wikidata for %s and %s" , facility_name , search_name_fallback )
1519 search_url = "https://www.wikidata.org/w/api.php"
1620 params = {
17- "action" : "wbsearchentities" ,
18- "search" : facility_name ,
19- "language" : "en" ,
20- "format" : "json" ,
21- "limit" : 3 ,
21+ "facility_name" : {
22+ "action" : "wbsearchentities" ,
23+ "search" : facility_name ,
24+ "language" : "en" ,
25+ "format" : "json" ,
26+ "limit" : 3 ,
27+ },
28+ "fallback" : {
29+ "action" : "wbsearchentities" ,
30+ "search" : search_name_fallback ,
31+ "language" : "en" ,
32+ "format" : "json" ,
33+ "limit" : 3 ,
34+ },
2235 }
23- self .resp_info ["enrichment_type" ] = "wikidata"
2436 data = {}
25- try :
26- response = self ._req (search_url , params = params )
27- data = response .json ()
28- except Exception as e :
29- logger .debug (" Wikidata search error for '%s': %s" , facility_name , e )
30- self .resp_info ["search_query_steps" ].append (f"(Failed -> { e } )" ) # type: ignore [attr-defined]
31- if not data .get ("search" ):
32- params ["search" ] = search_name_fallback
33- self .resp_info ["search_query_steps" ].append (search_name_fallback ) # type: ignore [attr-defined]
37+ for search , params in params .items ():
38+ self .resp_info ["search_query_steps" ].append (params ["search" ]) # type: ignore [attr-defined]
3439 try :
35- response = self . _req (search_url , params = params )
40+ response = req_get (search_url , params = params , wait_time = self . _wait_time )
3641 data = response .json ()
42+ break
3743 except Exception as e :
3844 logger .debug (" Wikidata search error for '%s': %s" , facility_name , e )
3945 self .resp_info ["search_query_steps" ].append (f"(Failed -> { e } )" ) # type: ignore [attr-defined]
@@ -45,10 +51,11 @@ def search(self) -> dict:
4551 if any (term in description for term in match_terms ):
4652 self .resp_info ["url" ] = f"https://www.wikidata.org/wiki/{ result ['id' ]} "
4753 self .resp_info ["title" ] = result .get ("label" , "" )
48- return self .resp_info
49- # fallback to first result
50- first = data ["search" ][0 ]
51- logger .debug (" Closer matching failed, falling back to first result %s" , first )
52- self .resp_info ["url" ] = f"https://www.wikidata.org/wiki/{ result ['id' ]} "
53- self .resp_info ["title" ] = result .get ("label" , "" )
54+ break
55+ else :
56+ # fall back to first result
57+ first = data ["search" ][0 ]
58+ logger .debug (" Closer matching failed, falling back to first result %s" , first )
59+ self .resp_info ["url" ] = f"https://www.wikidata.org/wiki/{ first ['id' ]} "
60+ self .resp_info ["title" ] = first .get ("label" , "" )
5461 return self .resp_info
0 commit comments