array(
'd' => array(
'name' => 'Section',
'type' => 'list',
'values' => array(
'Hot' => 'hot',
'Trending' => 'trending',
'Fresh' => 'fresh',
),
),
'p' => array(
'name' => 'Pages',
'type' => 'number',
'defaultValue' => 3,
),
),
'Sections' => array(
'g' => array(
'name' => 'Section',
'type' => 'list',
'values' => array(
'Animals' => 'cute',
'Anime & Manga' => 'anime-manga',
'Ask 9GAG' => 'ask9gag',
'Awesome' => 'awesome',
'Basketball' => 'basketball',
'Car' => 'car',
'Classical Art Memes' => 'classicalartmemes',
'Comic' => 'comic',
'Cosplay' => 'cosplay',
'Countryballs' => 'country',
'DIY & Crafts' => 'imadedis',
'Drawing & Illustration' => 'drawing',
'Fan Art' => 'animefanart',
'Food & Drinks' => 'food',
'Football' => 'football',
'Fortnite' => 'fortnite',
'Funny' => 'funny',
'GIF' => 'gif',
'Gaming' => 'gaming',
'Girl' => 'girl',
'Girly Things' => 'girly',
'Guy' => 'guy',
'History' => 'history',
'Home Design' => 'home',
'Horror' => 'horror',
'K-Pop' => 'kpop',
'LEGO' => 'lego',
'League of Legends' => 'leagueoflegends',
'Movie & TV' => 'movie-tv',
'Music' => 'music',
'NFK - Not For Kids' => 'nsfw',
'Overwatch' => 'overwatch',
'PC Master Race' => 'pcmr',
'PUBG' => 'pubg',
'Pic Of The Day' => 'photography',
'Pokémon' => 'pokemon',
'Politics' => 'politics',
'Relationship' => 'relationship',
'Roast Me' => 'roastme',
'Satisfying' => 'satisfying',
'Savage' => 'savage',
'School' => 'school',
'Sci-Tech' => 'science',
'Sport' => 'sport',
'Star Wars' => 'starwars',
'Superhero' => 'superhero',
'Surreal Memes' => 'surrealmemes',
'Timely' => 'timely',
'Travel' => 'travel',
'Video' => 'video',
'WTF' => 'wtf',
'Wallpaper' => 'wallpaper',
'Warhammer' => 'warhammer',
),
),
't' => array(
'name' => 'Type',
'type' => 'list',
'values' => array(
'Hot' => 'hot',
'Fresh' => 'fresh',
),
),
'p' => array(
'name' => 'Pages',
'type' => 'number',
'defaultValue' => 3,
),
),
);
const MIN_NBR_PAGE = 1;
const MAX_NBR_PAGE = 6;
protected $p = null;
public function collectData() {
$url = sprintf(
'%sv1/group-posts/group/%s/type/%s?',
self::URI,
$this->getGroup(),
$this->getType()
);
$cursor = 'c=10';
$posts = array();
for ($i = 0; $i < $this->getPages(); ++$i) {
$content = getContents($url . $cursor);
$json = json_decode($content, true);
$posts = array_merge($posts, $json['data']['posts']);
$cursor = $json['data']['nextCursor'];
}
foreach ($posts as $post) {
$item['uri'] = $post['url'];
$item['title'] = $post['title'];
$item['content'] = self::getContent($post);
$item['categories'] = self::getCategories($post);
$item['timestamp'] = self::getTimestamp($post);
$this->items[] = $item;
}
}
public function getName() {
if ($this->getInput('d')) {
$name = sprintf('%s - %s', '9GAG', $this->getParameterKey('d'));
} elseif ($this->getInput('g')) {
$name = sprintf('%s - %s', '9GAG', $this->getParameterKey('g'));
if ($this->getInput('t')) {
$name = sprintf('%s [%s]', $name, $this->getParameterKey('t'));
}
}
if (!empty($name)) {
return $name;
}
return self::NAME;
}
public function getURI() {
$uri = $this->getInput('g');
if ($uri === 'default') {
$uri = $this->getInput('t');
}
return self::URI . $uri;
}
protected function getGroup() {
if ($this->getInput('d')) {
return 'default';
}
return $this->getInput('g');
}
protected function getType() {
if ($this->getInput('d')) {
return $this->getInput('d');
}
return $this->getInput('t');
}
protected function getPages() {
if ($this->p === null) {
$value = (int) $this->getInput('p');
$value = ($value < self::MIN_NBR_PAGE) ? self::MIN_NBR_PAGE : $value;
$value = ($value > self::MAX_NBR_PAGE) ? self::MAX_NBR_PAGE : $value;
$this->p = $value;
}
return $this->p;
}
protected function getParameterKey($input = '') {
$params = $this->getParameters();
$tab = 'Sections';
if ($input === 'd') {
$tab = 'Popular';
}
if (!isset($params[$tab][$input])) {
return '';
}
return array_search(
$this->getInput($input),
$params[$tab][$input]['values']
);
}
protected static function getContent($post) {
if ($post['type'] === 'Animated') {
$content = self::getAnimated($post);
} elseif ($post['type'] === 'Article') {
$content = self::getArticle($post);
} else {
$content = self::getPhoto($post);
}
return $content;
}
protected static function getPhoto($post) {
$image = $post['images']['image460'];
$photo = '',
$image['url'],
$post['title'],
'width="500"'
);
$photo .= '