前回の記事「ChatGPTとPythonで学ぶ!APIを使った高度なデータ収集と自動化」では、APIの基礎について学びました。今回の記事では、さらに一歩進んで、Hacker News APIを使いながら、具体的なAPIリクエストの送信方法やデータ取得のプロセスを実践していきます。また、取得したデータをプログラム内でフィルタリングする方法も取り上げ、APIの活用術をより深く理解できる内容をお届けします。これを機に、実際のプロジェクトでAPIを使いこなせるスキルを身につけていきましょう。
Pythonの始め方についてはこちらの記事を参考にしてみてください!!
参考記事
ブログ内のコードはコピーして使用できます
APIとは何か?
APIは「Application Programming Interface」の略です。簡単に言うと、APIはコンピュータプログラム同士が話すためのルールです。
APIをカフェでの注文に例えてみましょう
- あなた(ユーザー): レストランのお客さん
- キッチン(サービス): 食べ物を作る場所
- ウェイター(API): あなたとキッチンをつなぐ人
レストランで食事を注文する時、あなたはウェイターに「パスタをください」と伝えます。ウェイターはそのメッセージをキッチンに伝え、キッチンでパスタが作られます。パスタができたら、ウェイターはそれをあなたに届けます。
APIはこの「ウェイター」のような役割を果たします。
- あなた(プログラム)はAPIを通じて他のプログラム(サービス)に何かをお願いしたり、情報を取り出したりします。
- APIはそのお願いを受け取って、必要な情報を持ってきたり、指示を実行したりします。
ステップ1: 基本的なAPIリクエストの送信とデータ取得
まずは、Hacker News APIからデータを取得するシンプルなリクエストを送信してみましょう。以下のコードは、Hacker NewsのトップストーリーのIDリストを取得するものです。
APIリクエストの送信とデータ取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import requests # Hacker News APIのトップストーリーのエンドポイント top_stories_url = 'https://hacker-news.firebaseio.com/v0/topstories.json' # APIリクエストを送信してデータを取得 response = requests.get(top_stories_url) # レスポンスからJSONデータを取得 story_ids = response.json() # 取得したトップストーリーのIDを表示 print("トップストーリーのIDリスト:") print(story_ids[:10]) # 最初の10個のIDを表示 |
出力
1 2 |
トップストーリーのIDリスト: [41338877, 41339308, 41310319, 41338776, 41339818, 41341353, 41337356, 41340948, 41339493, 41339885] |
何か数字が出力されたことがわかりますが、この数字が何なのかわかりませんよね!!
https://hacker-news.firebaseio.com/v0/topstories.json
コードに入力しているサイトに行ってみましょう。
上記の画像のような数字が書かれた画面が出て来ます。
この最初にある10個のIDを表示するコードとなっています。
ステップ2: 特定のデータを取得
次に、取得したストーリーIDの中から、1つのストーリーの詳細を取得してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 取得した最初のストーリーIDを使用して、ストーリーの詳細を取得 story_id = story_ids[0] story_url = f'https://hacker-news.firebaseio.com/v0/item/{story_id}.json' # APIリクエストを送信して、特定のストーリーのデータを取得 story_response = requests.get(story_url) story_data = story_response.json() # ストーリーの詳細を表示 print("\nストーリーの詳細:") print(f"タイトル: {story_data['title']}") print(f"URL: {story_data.get('url', 'URLなし')}") print(f"スコア: {story_data['score']}") print(f"コメント数: {story_data['descendants']}") |
出力
1 2 3 4 5 |
ストーリーの詳細: タイトル: Pipe Syntax in SQL URL: https://research.google/pubs/sql-has-problems-we-can-fix-them-pipe-syntax-in-sql/ スコア: 168 コメント数: 125 |
URLを検索してみると以下のようなサイトに飛びました
https://research.google/pubs/sql-has-problems-we-can-fix-them-pipe-syntax-in-sql/
なんだかAPIを活用できてる感が出てきてワクワクしております🤭
ステップ3: リクエストパラメータを使ったデータのフィルタリング
Hacker News API自体は、リクエストパラメータによるフィルタリング機能が限られていますが、取得したデータをプログラム内でフィルタリングすることが可能です。例えば、スコアが一定以上のストーリーだけを表示するフィルタリングを行います。
1 2 3 4 5 6 7 8 9 10 11 12 |
# スコアが100以上のストーリーのみ表示する min_score = 100 for story_id in story_ids[:10]: story_url = f'https://hacker-news.firebaseio.com/v0/item/{story_id}.json' story_response = requests.get(story_url) story_data = story_response.json() if story_data['score'] >= min_score: print("\nフィルタリングされたストーリー:") print(f"タイトル: {story_data['title']}") print(f"スコア: {story_data['score']}") |
出力
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
フィルタリングされたストーリー: タイトル: Pipe Syntax in SQL スコア: 168 フィルタリングされたストーリー: タイトル: Small Strings in Rust: smolstr vs. smartstring スコア: 101 フィルタリングされたストーリー: タイトル: Hot Page – a graphical site builder スコア: 271 フィルタリングされたストーリー: タイトル: JavaScript dates are about to be fixed スコア: 232 フィルタリングされたストーリー: タイトル: NASA Decides to Bring Starliner Spacecraft Back to Earth Without Crew スコア: 126 |
データのフィルタリングを行うことで、人気のあるコンテンツのみを収集することができます。
ステップ4: 複数のストーリーを一括で処理する
1つのストーリーについて詳細情報を取得しましたが、複数のストーリーを一括で処理し、その中から条件に合致するデータをフィルタリングする方法を学びます。
複数のストーリーを一括で取得して処理するコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import requests # Hacker News APIのトップストーリーのエンドポイント top_stories_url = 'https://hacker-news.firebaseio.com/v0/topstories.json' # APIリクエストを送信してデータを取得 response = requests.get(top_stories_url) story_ids = response.json() # スコアが100以上のストーリーをリストに追加 filtered_stories = [] for story_id in story_ids[:10]: # ここでは最初の10件を処理 story_url = f'https://hacker-news.firebaseio.com/v0/item/{story_id}.json' story_response = requests.get(story_url) story_data = story_response.json() if story_data['score'] >= 100: # スコアが100以上のストーリーをフィルタリング filtered_stories.append({ 'title': story_data['title'], 'score': story_data['score'], 'url': story_data.get('url', 'URLなし') }) # フィルタリングされたストーリーを表示 print("\nフィルタリングされたストーリー:") for story in filtered_stories: print(f"タイトル: {story['title']}, スコア: {story['score']}, URL: {story['url']}") |
出力
1 2 3 4 |
フィルタリングされたストーリー: タイトル: Ask HN: What are you working on (August 2024)?, スコア: 220, URL: URLなし タイトル: Defenders think in lists, attackers think in graphs (2015), スコア: 123, URL: https://github.com/JohnLaTwC/Shared/blob/master/Defenders%20think%20in%20lists.%20Attackers%20think%20in%20graphs.%20As%20long%20as%20this%20is%20true%2C%20attackers%20win.md タイトル: You are not dumb, you just lack the prerequisites, スコア: 274, URL: https://lelouch.dev/blog/you-are-probably-not-dumb/ |
ステップ5: データの保存
次に、フィルタリングされたデータをファイルに保存する方法を学びます。JSONファイルに保存することで、後でデータを再利用したり、他のプログラムで読み込むことが容易になります。
データをJSONファイルに保存するコード
1 2 3 4 5 6 7 |
import json # フィルタリングされたストーリーをファイルに保存 with open('filtered_stories.json', 'w', encoding='utf-8') as file: json.dump(filtered_stories, file, ensure_ascii=False, indent=2) print("フィルタリングされたデータが 'filtered_stories.json' に保存されました。") |
出力
このコード単独では、ファイルに保存するデータがないのでエラーが出てきます。
ステップ6: 実行と確認
上記のコードをステップ5のこーどにいれて実行し、filtered_stories.json
というファイルにフィルタリングされたストーリーのデータが保存されることを確認しましょう。このファイルには、スコアが100以上のトップストーリーが含まれています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import requests import json # Hacker News APIのトップストーリーのエンドポイント top_stories_url = 'https://hacker-news.firebaseio.com/v0/topstories.json' # APIリクエストを送信してデータを取得 response = requests.get(top_stories_url) story_ids = response.json() # スコアが100以上のストーリーをリストに追加 filtered_stories = [] for story_id in story_ids[:10]: # ここでは最初の10件を処理 story_url = f'https://hacker-news.firebaseio.com/v0/item/{story_id}.json' story_response = requests.get(story_url) story_data = story_response.json() if story_data['score'] >= 50: # スコアが100以上のストーリーをフィルタリング filtered_stories.append({ 'title': story_data['title'], 'score': story_data['score'], 'url': story_data.get('url', 'URLなし') }) # フィルタリングされたストーリーを表示 print("\nフィルタリングされたストーリー:") for story in filtered_stories: print(f"タイトル: {story['title']}, スコア: {story['score']}, URL: {story['url']}") # フィルタリングされたストーリーをファイルに保存 with open('filtered_stories.json', 'w', encoding='utf-8') as file: json.dump(filtered_stories, file, ensure_ascii=False, indent=2) print("フィルタリングされたデータが 'filtered_stories.json' に保存されました。") |
出力
1 2 3 4 |
フィルタリングされたストーリー: タイトル: Ask HN: What are you working on (August 2024)?, スコア: 228, URL: URLなし タイトル: Defenders think in lists, attackers think in graphs (2015), スコア: 127, URL: https://github.com/JohnLaTwC/Shared/blob/master/Defenders%20think%20in%20lists.%20Attackers%20think%20in%20graphs.%20As%20long%20as%20this%20is%20true%2C%20attackers%20win.md フィルタリングされたデータが 'filtered_stories.json' に保存されました。 |
JSONファイルの作成
まとめ
今回の記事では、Hacker News APIを使って、具体的なAPIリクエストの送信方法やデータ取得のプロセスを学びました。特に、取得したデータをプログラム内でフィルタリングする方法や、フィルタリングされたデータをJSONファイルに保存する手法についても詳しく解説しました。
主なポイントは以下の通りです:
- APIとは何か?
- APIは、異なるプログラム間でデータや機能をやり取りするためのインターフェースです。カフェでの注文を例に挙げて、APIの役割を理解しました。
- Hacker News APIからデータを取得する方法
- Pythonの
requests
ライブラリを使って、APIリクエストを送信し、トップストーリーのIDリストを取得しました。
- Pythonの
- 特定のデータを取得する方法
- 取得したIDの中から、特定のストーリーの詳細を取得し、そのデータを表示しました。
- データのフィルタリング
- スコアが100以上のストーリーだけをフィルタリングして表示する方法を学びました。これは、より価値のあるデータに絞り込みたい場合に有効です。
- フィルタリングされたデータの保存
- フィルタリングされたストーリーのデータをJSON形式で保存する方法を紹介しました。保存されたデータは、後で再利用したり、他のプログラムで読み込むことができます。
これで、APIを使ったデータ収集と処理の基本的な流れを理解できたと思います。実際のプロジェクトに応用して、APIを使いこなすスキルをさらに磨いていきましょう。次回の記事では、さらに高度なAPI活用法や自動化の技術について取り上げる予定ですので、ぜひお楽しみに!
次回の記事
関連記事
Pythonを学びたい方はこちらの記事を参考にしてみてください
関連記事
プログラミング学習を進めているけれど、まだ副収入につなげられていない…そんなあなたへ!今こそ、学んだスキルを活かして副業に挑戦する絶好のチャンスです。プログラミングだけでなく、自分のスキルや商品をネットで販売する『ネットショップ』を開設してみませんか?
ネットショップを持つことで、自分の知識やスキルをより多くの人に届け、副収入を得ることが可能です。学んできたプログラミングを活かして、ショップのカスタマイズや運営も自由自在に行えますし、もし商品作成が難しい場合でも、デジタル商品やサービス提供など、いろんな選択肢があります。
このステップで一歩踏み出せば、今学んでいることが副収入に直結し、自分の時間をより有効に使うことができるはずです!一緒にネットショップを開設し、副業の第一歩を踏み出しましょう!
タイトルテキスト
プログラミングを学びたいけど、どこから始めたらいいのか分からない、自分に合っているか不安…そんな悩みを持っている方におすすめしたいのが、 無料相談 サービスです!
この無料相談では、あなたの現状や目標に合わせて、最適な学習プランを一緒に考えてくれます。どんなスキルが必要なのか、どうやって学習を進めると効果的かを具体的にアドバイスしてもらえるので、無駄なく効率的にスタートを切ることができます。
さらに、プログラミング学習には同じ目標を持つ 仲間 がいること、そして頼りになる メンター の存在がとても大きな支えになります。独学ではどうしてもつまずきやすい部分も、メンターがあなたの成長に合わせて親身にサポートしてくれるので、安心して学びを進められます。
まずは 無料相談 で、あなたに合ったプランを見つけて、スキルアップへの第一歩を踏み出してみませんか?今なら、迷っている方でも気軽に相談できるチャンスです!