hackernews について
hackernewsは、Firebase APIからHacker Newsのストーリー、コメント、求人、ユーザーデータを取得するスキルです。エンドポイント例と、コマンドラインでの確認・絞り込み方法を紹介します。
主な機能
- 01トップ、ベスト、新着ストーリーの取得
- 02Ask HN、Show HN、求人の取得
- 03アイテムとコメント詳細の取得
- 04ユーザープロフィールと投稿の参照
- 05変更されたアイテムとプロフィールの確認
活用シーン
- 01Hacker Newsの最新ストーリーの確認
- 02ストーリーのスコアとコメントの調査
- 03ユーザーの最近の投稿の検索
- 04変更されたコンテンツのポーリング
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ okou-ai/ okou-skills --skill hackernewsインストール後、Claude Code で/hackernewsを入力して読み込まれたか確認します。
詳細
使い方
1. トップストーリーを取得する
現在のトップ500件のストーリーIDを取得します:
curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | jq '.[:10]'
2. ベストストーリーを取得する
時間を通じて最も多く投票されたストーリーを取得します:
curl -s "https://hacker-news.firebaseio.com/v0/beststories.json" | jq '.[:10]'
3. 新着ストーリーを取得する
最新のストーリーを取得します:
curl -s "https://hacker-news.firebaseio.com/v0/newstories.json" | jq '.[:10]'
4. Ask HN ストーリーを取得する
「Ask HN」の投稿を取得します:
curl -s "https://hacker-news.firebaseio.com/v0/askstories.json" | jq '.[:10]'
5. Show HN ストーリーを取得する
「Show HN」の投稿を取得します:
curl -s "https://hacker-news.firebaseio.com/v0/showstories.json" | jq '.[:10]'
6. 求人ストーリーを取得する
求人情報を取得します:
curl -s "https://hacker-news.firebaseio.com/v0/jobstories.json" | jq '.[:10]'
アイテムの詳細
7. ストーリー/コメント/求人の詳細を取得する
IDを指定して、任意のアイテムの詳細を取得します。<item-id> を実際のアイテムIDに置き換えてください:
curl -s "https://hacker-news.firebaseio.com/v0/item/<item-id>.json"
レスポンスフィールド:
| フィールド | 説明 |
|---|---|
id | アイテムの一意のID |
type | story、comment、job、poll、pollopt |
by | 投稿者のユーザー名 |
time | Unix タイムスタンプ |
title | ストーリーのタイトル(ストーリーのみ) |
url | ストーリーのURL(外部リンクがある場合) |
text | 本文(Ask HN、コメント) |
score | アップボート数 |
descendants | コメントの総数 |
kids | 子コメントIDの配列 |
8. 詳細付きで複数のストーリーを取得する
上位5件のストーリーの詳細を取得します。<item-id> を実際のアイテムIDに置き換えてください:
curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | jq '.[:5][]' | while read id; do
curl -s "https://hacker-news.firebaseio.com/v0/item/${id}.json" | jq '{id, title, score, url, by}'
done
9. コメント付きでストーリーを取得する
ストーリーとそのトップレベルコメントを取得します。<story-id> を実際のストーリーIDに置き換えてください:
curl -s "https://hacker-news.firebaseio.com/v0/item/<story-id>.json" | jq '{title, score, descendants, kids}'
次に、kids 配列内の各コメントIDについて、<comment-id> を実際のコメントIDに置き換えてください:
curl -s "https://hacker-news.firebaseio.com/v0/item/<comment-id>.json" | jq '{by, text, score}'
ユーザーデータ
10. ユーザープロフィールを取得する
ユーザーの詳細を取得します。<username> を実際のユーザー名に置き換えてください:
curl -s "https://hacker-news.firebaseio.com/v0/user/<username>.json"
レスポンスフィールド:
| フィールド | 説明 |
|---|---|
id | ユーザー名 |
created | アカウント作成時のタイムスタンプ |
karma | ユーザーのカルマスコア |
about | ユーザーの自己紹介(HTML) |
submitted | 投稿したアイテムIDの配列 |
11. ユーザーの最近の投稿を取得する
ユーザーの最近の投稿を取得します。<username> を実際のユーザー名に置き換えてください:
curl -s "https://hacker-news.firebaseio.com/v0/user/<username>.json" | jq '.submitted[:5]'
リアルタイム更新
12. 最大アイテムIDを取得する
現在の最大アイテムIDを取得します(新しいアイテムのポーリングに便利です):
curl -s "https://hacker-news.firebaseio.com/v0/maxitem.json"
13. 変更されたアイテムとプロフィールを取得する
最近変更されたアイテムとプロフィールを取得します(リアルタイム更新用):
curl -s "https://hacker-news.firebaseio.com/v0/updates.json"
実用例
今日のトップ10をスコア付きで取得する
curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | jq '.[:10][]' | while read id; do
curl -s "https://hacker-news.firebaseio.com/v0/item/${id}.json" | jq -r '"\(.score) points | \(.title) | \(.url // "Ask HN")"'
done
高スコアのストーリーを見つける(100点以上)
curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | jq '.[:30][]' | while read id; do
curl -s "https://hacker-news.firebaseio.com/v0/item/${id}.json" | jq -r 'select(.score >= 100) | "\(.score) | \(.title)"'
done
最新の AI/ML 関連ストーリーを取得する
curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | jq '.[:50][]' | while read id; do
curl -s "https://hacker-news.firebaseio.com/v0/item/${id}.json" | jq -r 'select(.title | test("AI|GPT|LLM|Machine Learning|Neural"; "i")) | "\(.score) | \(.title)"'
done
API エンドポイント一覧
| エンドポイント | 説明 |
|---|---|
/v0/topstories.json | トップ500件のストーリー |
/v0/beststories.json | ベストストーリー |
/v0/newstories.json | 最新500件のストーリー |
/v0/askstories.json | Ask HN ストーリー |
/v0/showstories.json | Show HN ストーリー |
/v0/jobstories.json | 求人情報 |
/v0/item/{id}.json | アイテムの詳細 |
/v0/user/{id}.json | ユーザープロフィール |
/v0/maxitem.json | 現在の最大アイテムID |
/v0/updates.json | 変更されたアイテム/プロフィール |
ガイドライン
- レート制限の記載なし:ただし、節度を守り、大量取得時は遅延を設けてください
- フィルタリングには jq を使用する:JSON レスポンスをフィルタリングして、必要なデータを抽出してください
- 結果をキャッシュする:ストーリーは頻繁に変わらないため、可能な場合はキャッシュしてください
- リクエストを慎重にまとめる:アイテムごとに個別の API 呼び出しが必要です
- null を処理する:一部のフィールドは null または欠落している場合があります(例:Ask HN の
url) - Unix タイムスタンプ:時刻はすべて Unix タイムスタンプです。必要に応じて変換してください
コメント
Markdown 対応