[ 'name' => 'Category', 'type' => 'text', 'required' => true, 'exampleValue' => 'Announcements,News,News', ], 'page_size' => [ 'name' => 'Page Size', 'type' => 'number', 'required' => false, 'defaultValue' => 16, ], 'page' => [ 'name' => 'Page', 'type' => 'number', 'required' => false, 'defaultValue' => 1, ], ] ]; /** * Collects data from the Crunchyroll API and formats it as an RSS feed. */ public function collectData() { // Define API base URL $apiBaseUrl = 'https://cr-news-api-service.prd.crunchyrollsvc.com/v1/en-US/stories/search'; // Retrieve input parameters $category = $this->getInput('category'); $pageSize = $this->getInput('page_size'); $page = $this->getInput('page'); // Construct the API URL $apiUrl = sprintf( '%s?category=%s&page_size=%d&page=%d', $apiBaseUrl, urlencode($category), $pageSize, $page ); // Define HTTP headers for the API request $options = [ 'http' => [ 'method' => 'GET', 'header' => [ 'User-Agent: Mozilla/5.0 (compatible; RSSBridge/2025)', 'Accept: application/json', 'Accept-Language: en-US,en;q=0.5', 'Origin: https://www.crunchyroll.com', 'Referer: https://www.crunchyroll.com/', ], ], ]; // Create a context for the HTTP request $context = stream_context_create($options); // Fetch data from the API $response = file_get_contents($apiUrl, false, $context); if ($response === false) { throw new Exception('Failed to fetch data from the Crunchyroll API.'); } // Parse the JSON response $data = json_decode($response, true); if (json_last_error() !== JSON_ERROR_NONE) { throw new Exception('Failed to decode JSON response: ' . json_last_error_msg()); } // Process each story in the response foreach ($data['stories'] as $story) { $item = []; // Set the item properties $item['uri'] = self::URI . '/' . $story['slug']; $item['title'] = $story['content']['headline']; $item['timestamp'] = strtotime($story['content']['article_date']); $item['author'] = 'Unknown'; // Author data can be added if available $item['content'] = sprintf( '%s
%s', $story['content']['thumbnail']['filename'], htmlspecialchars($story['content']['thumbnail']['alt']), htmlspecialchars($story['content']['lead']) ); $item['categories'] = $story['tag_list'] ?? []; $item['uid'] = $story['uuid']; // Add the item to the feed $this->items[] = $item; } } }