From c2efdd4eeb1d62487e0e471c6c688243b3da1f41 Mon Sep 17 00:00:00 2001 From: thibaud-leclere Date: Mon, 30 Mar 2026 22:31:42 +0200 Subject: [PATCH] feat: add WikidataAwardGateway for actor awards from Wikidata SPARQL --- src/Service/WikidataAwardGateway.php | 73 ++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/Service/WikidataAwardGateway.php 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 <<