diff --git a/src/Service/WikidataAwardGateway.php b/src/Service/WikidataAwardGateway.php new file mode 100644 index 0000000..db19bc5 --- /dev/null +++ b/src/Service/WikidataAwardGateway.php @@ -0,0 +1,73 @@ + + */ + public function getAwards(Actor $actor): array + { + $sparql = $this->buildQuery($actor->getName()); + + $response = $this->httpClient->request('GET', self::SPARQL_ENDPOINT, [ + 'query' => [ + 'query' => $sparql, + 'format' => 'json', + ], + 'headers' => [ + 'Accept' => 'application/sparql-results+json', + 'User-Agent' => 'LtbxdActorle/1.0', + ], + ]); + + $data = $response->toArray(); + $awards = []; + + foreach ($data['results']['bindings'] ?? [] as $binding) { + $name = $binding['awardLabel']['value'] ?? null; + $year = $binding['year']['value'] ?? null; + + if ($name && $year) { + $awards[] = [ + 'name' => $name, + 'year' => (int) substr($year, 0, 4), + ]; + } + } + + return $awards; + } + + private function buildQuery(string $actorName): string + { + $escaped = str_replace('"', '\\"', $actorName); + + return <<