diff options
author | Joas Schilling <coding@schilljs.com> | 2019-04-03 15:28:20 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2019-04-08 17:00:53 +0200 |
commit | 30cf5c289bf49eb33ac7b2dd8997fdc9d10a5cf4 (patch) | |
tree | c7f0becfac865f8a562502e4ba62fdf2f174682e /sample-commands/hackernews.php | |
parent | d3835dfc83c936e0cabe99052fa558614bf5764c (diff) |
Add /hackernews example
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'sample-commands/hackernews.php')
-rw-r--r-- | sample-commands/hackernews.php | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/sample-commands/hackernews.php b/sample-commands/hackernews.php new file mode 100644 index 000000000..eea886829 --- /dev/null +++ b/sample-commands/hackernews.php @@ -0,0 +1,74 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2019 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +if (PHP_SAPI !== 'cli') { + // Only allow access via the console + exit; +} + +if ($argc < 2) { + echo 'Missing search term in call to hackernews.php'; + return 1; +} + +$mode = $argv[1]; + +if ($mode === '--help' || !in_array($mode, ['top', 'new', 'best', ''], true)) { + echo '/hackernews - A simple command to list the Top 5 top, new or best stories' . "\n"; + echo "\n"; + echo 'Example: /hackernews top' . "\n"; + return; +} + +$mode = $mode ?: 'top'; +$endpoint = 'https://hacker-news.firebaseio.com/v0/' . $mode . 'stories.json'; +$content = file_get_contents($endpoint); +$results = json_decode($content, true); +$stories = array_slice($results, 0, 5); + +$response = 'Hackernews ' . ucfirst($mode) . ' 5:' . "\n"; +$length = 120; + +foreach ($stories as $storyId) { + $endpoint = 'https://hacker-news.firebaseio.com/v0/item/' . $storyId . '.json'; + $content = file_get_contents($endpoint); + $result = json_decode($content, true); + + $link = " - {$result['url']}\n"; + $remainingLength = max(strlen($result['title']),$length - strlen($link)); + if ($remainingLength < strlen('* ' . $result['title'])) { + $response .= substr('* ' . $result['title'], 0, $remainingLength) . '…' . $link; + } else { + $response .= '* ' . $result['title'] . $link; + } +} + +$page = 'news'; +if ($mode === 'new') { + $page = 'newest'; +} else if ($mode === 'best') { + $page = 'best'; +} + +$response .= "Find more at https://news.ycombinator.com/$page"; + +echo ($response); |