failed()) { return false; } return self::parse($request->body(), $page); } /** * @param int $page * @return array|false */ public static function press(int $page = 1): bool|array { $request = self::request($page, 'Press'); if ($request->failed()) { return false; } return self::parse($request->body()); } /** * @param int $page * @return array|false */ public static function financial(int $page = 1): bool|array { $request = self::request($page, 'Financial'); if ($request->failed()) { return false; } return self::parse($request->body()); } /** * @param int $page * @return array|false */ public static function news(int $page = 1): bool|array { $request = self::request($page, 'News'); if ($request->failed()) { return false; } return self::parse($request->body()); } /** * @param int $page * @return array|false */ public static function media(int $page = 1): bool|array { $request = self::request($page, 'Media'); if ($request->failed()) { return false; } return self::parse($request->body()); } /** * @param int $page * @param string|null $m * @return false|\Illuminate\Http\Client\Response */ private static function request(int $page = 1, string $m = null): bool|\Illuminate\Http\Client\Response { if (env('LARAVEL_CISION_FEED_SLUG') === null) { return false; } $query = [ 'n' => env('LARAVEL_CISION_FEED_SLUG'), 'pageIx' => $page, 'format' => 'rss', ]; if ($m) { $query['m'] = $m; } return Http::get('https://news.cision.com/se/ListItems?'.http_build_query($query)); } /** * @param string|null $data * @param int $page * @return bool|array */ private static function parse(string $data = null, int $page = 1): bool|array { if ($data === null) { return false; } $xml = simplexml_load_string($data, "SimpleXMLElement", LIBXML_NOCDATA); $json = json_encode($xml); $rows = json_decode($json, true); if (! isset($rows['channel']['item'])) { return false; } $return = []; foreach ($rows['channel']['item'] as $row) { $return[] = [ 'guid' => $row['guid'], 'title' => $row['title'], 'description' => $row['description'], 'link' => $row['link'], 'created_at' => Carbon::parse($row['pubDate'])->addHours(2)->format('Y-m-d H:i:s'), ]; } $return['previous_page'] = $page > 1 ? $page-- : false; $return['next_page'] = count( $rows['channel']['item'] ) === 24 ? ++$page : false; return $return; } }