102 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| class GenshinImpactNewsBridge extends BridgeAbstract
 | |
| {
 | |
|     const MAINTAINER = 'Brawl, Akamaru';
 | |
|     const NAME = 'Genshin Impact News';
 | |
|     const URI = 'https://sg-public-api-static.hoyoverse.com/content_v2_user/app/a1b1f9d3315447cc/getContentList';
 | |
|     const CACHE_TIMEOUT = 3600; // 3600 = 1h
 | |
|     const DESCRIPTION = 'Get the latest news from Genshin Impact!';
 | |
|     const PARAMETERS = array(
 | |
|         array(
 | |
|             'lang' => array(
 | |
|                 'name' => 'Language',
 | |
|                 'type' => 'list',
 | |
|                 'values' => array(
 | |
|                     'English' => 'en-us',
 | |
|                     '繁體中文' => 'zh-tw',
 | |
|                     '한국어' => 'ko-kr',
 | |
|                     '日本語' => 'ja-jp',
 | |
|                     'Français' => 'fr-fr',
 | |
|                     'Deutsch' => 'de-de',
 | |
|                     'Português' => 'pt-pt',
 | |
|                     'Español' => 'es-es',
 | |
|                     'Русский' => 'ru-ru',
 | |
|                     'Bahasa Indonesia' => 'id-id',
 | |
|                     'Tiếng Việt' => 'vi-vn',
 | |
|                     'ไทย' => 'th-th',
 | |
|                 ),
 | |
|                 'required' => true
 | |
|             ),
 | |
|             'limit' => array(
 | |
|                 'name' => 'Limit',
 | |
|                 'type' => 'number',
 | |
|                 'required' => false,
 | |
|                 'defaultValue' => 10
 | |
|             )
 | |
|         )
 | |
|     );
 | |
| 
 | |
|     private $pageUrl = self::URI;
 | |
| 
 | |
|     public function getURI()
 | |
|     {
 | |
|         return $this->pageUrl;
 | |
|     }
 | |
| 
 | |
|     public function collectData()
 | |
|     {
 | |
|         // Eingaben prüfen
 | |
|         $lang = $this->getInput('lang');
 | |
|         if (empty($lang)) {
 | |
|             returnClientError('Ungültige Sprache: ' . $lang);
 | |
|         }
 | |
|         $limit = $this->getInput('limit');
 | |
|         if (empty($limit)) {
 | |
|             $limit = 10;
 | |
|         }
 | |
| 
 | |
|         // Neue API-URL zusammenbauen
 | |
|         $query = http_build_query([
 | |
|             'iAppId' => 32,
 | |
|             'iChanId' => 395, // Standard-News-Kanal, ggf. anpassbar
 | |
|             'iPageSize' => $limit,
 | |
|             'iPage' => 1,
 | |
|             'sLangKey' => $lang
 | |
|         ]);
 | |
|         $jsonUrl = self::URI . '?' . $query;
 | |
|         $json = getContents($jsonUrl)
 | |
|             or returnServerError('Konnte die Genshin-News nicht abrufen.');
 | |
|         $data = json_decode($json);
 | |
|         if (!isset($data->data->list)) {
 | |
|             returnServerError('Ungültige Antwortstruktur.');
 | |
|         }
 | |
| 
 | |
|         $this->pageUrl = 'https://genshin.hoyoverse.com/' . $lang . '/news';
 | |
| 
 | |
|         foreach ($data->data->list as $element) {
 | |
|             $article_title = $element->sTitle;
 | |
|             $article_uid = $element->iInfoId;
 | |
|             $article_uri = $this->pageUrl . '/detail/' . $article_uid;
 | |
|             $article_timestamp = strtotime($element->dtStartTime);
 | |
|             $article_content = $element->sIntro;
 | |
| 
 | |
|             $item = array();
 | |
|             $item['uri'] = $article_uri;
 | |
|             $item['title'] = $article_title;
 | |
|             $item['timestamp'] = $article_timestamp;
 | |
|             $item['content'] = $article_content;
 | |
| 
 | |
|             // Thumbnail aus sExt->banner
 | |
|             if (!empty($element->sExt)) {
 | |
|                 $ext = json_decode($element->sExt);
 | |
|                 if (isset($ext->banner) && is_array($ext->banner) && isset($ext->banner[0]->url)) {
 | |
|                     $item['enclosures'] = array($ext->banner[0]->url);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             $this->items[] = $item;
 | |
|         }
 | |
|     }
 | |
| }
 | 
