3
2

QiitaのAPI、webスクレイピング、GPTを使用して記事書いてみた!実装手順(前編)

Last updated at Posted at 2024-03-07

はじめに

こんにちは、エンジニア2年目の嶋田です。
まずは、この記事を開いていただきありがとうございます!
先日以下の記事を投稿しました。

この記事を実際にどのように生成したのかを解説していきたいと思います!
前編と後編の2部構成にしました。
前編では、プロジェクトの環境構築、使用したツールの紹介、そしてプロジェクトの構造について説明します。

私が作成した記事は、完璧なものではありません。
実際のデータを使用して何か新しいものを作り出す、という基本的な流れのシェアです。
データの精度や記事の正確性に関してはまだまだ改善の余地があると思います。
学習過程の共有であると思いながら読んでいただけるとありがたいです。

もし、読者の皆さんの中で、より良い方法や改善点をお持ちの方がいれば、ぜひ教えてください🙇‍♂️

目次

概要

QiitaのAPIを利用して記事データを取得し、取得したデータを基にして新しい記事を生成すること」が今回のゴールです。この過程では、複数の技術が用いられています。requestsbeautifulsoup4を使ってWebスクレイピングを行い、configparserで設定ファイルを管理します。さらに、langchain-communityopenaiライブラリを使用して、GPTモデルに基づいたテキスト生成を行っています。

環境構築

プロジェクトを始める前に、適切な開発環境を設定する必要があります。ここでは、必要なツールのインストールから設定ファイルの作成まで、環境構築の手順を細かく説明します。このガイドに従えば、コピペだけで環境を整えることが可能です。

Pythonのインストール

このプロジェクトはPython 3.11を使用しています。Pythonがまだインストールされていない場合は、以下のリンクからインストーラーをダウンロードしてインストールしてください。

インストールが完了したら、コマンドラインで以下のコマンドを実行し、インストールされたPythonのバージョンを確認してください。

python --version

仮想環境のセットアップ

Pythonの仮想環境は、プロジェクトごとに依存関係を隔離するのに役立ちます。以下のコマンドを使用して、プロジェクト用の仮想環境を作成します。

python -m venv venv

作成した仮想環境をアクティベートします。

Linux/macOSの場合:

source venv/bin/activate

Windowsの場合:

.\venv\Scripts\activate

依存関係のインストール

requirements.txt

このプロジェクトでrequirements.txtファイルは、プロジェクトの依存関係を管理するために使用されます。このファイルにリストされたパッケージは、プロジェクト実行に必要な外部ライブラリやモジュールです。pip install -r requirements.txtコマンドを使って、これらの依存関係を一括でインストールできます。

今回のプロジェクトのrequirements.txtの内容は以下です。

requests
beautifulsoup4
configparser
langchain-community
langchain
openai

以下のコマンドを実行して、必要なライブラリをインストールします。

pip install -r requirements.txt

以下に、requirements.txtに含まれる主なライブラリとその用途について簡単に説明します。

  • requests
    • HTTPリクエストを送信するためのライブラリ
    • WebスクレイピングやAPIとの通信に使用
  • beautifulsoup4
    • HTMLやXMLファイルからデータを抽出するためのライブラリ
    • Webページの解析やデータ抽出に使用
  • configparser
    • 設定ファイルを解析するためのライブラリ
    • 今回のプロジェクトでは、APIキーなどの設定情報をconfig.iniファイルから読み込むために使用
  • langchain-communitylangchain
    • 自然言語処理や言語モデルに関連する機能を提供するライブラリ
      • 今回のプロジェクトでは、テキスト生成や言語理解のために使用
  • openai
    • OpenAI提供のAPIを利用するためのライブラリ
    • GPTモデルを用いたテキスト生成にこのライブラリが活用されている

これらのライブラリを使用することで、QiitaのAPIから記事データを取得し、それを基に新しい記事を自動生成することがこのプロジェクトの目的です。各ライブラリの詳細なドキュメントは、それぞれの公式サイトやGitHubリポジトリで確認できます。
これにより、requests, beautifulsoup4, configparser, langchain-community, langchain, openaiなど、プロジェクトで必要なすべてのパッケージがインストールされます。

環境変数の設定

セキュアな情報、例えばAPIキーなどは、環境変数を通じて管理することが推奨されます。config.iniファイルを作成し、そこに秘密情報を記載し、configparserを使用してプログラム内で読み込むことができます。

config.ini

[Qiita]
access_token = あなたのアクセストークン

[OpenAI]
api_key = あなたのAPIキー

Qiitaのアクセストークンの取得の仕方はこちらの記事を参考にしてください。
OpenAIのAPIキーの取得方法はこちらの記事を参考にしてください。

また、もしgit化する場合(今回私はgit管理かしていません。)はこのconfig.iniファイルはバージョン管理下に置かないようにしましょう。.gitignoreファイルに.envを追加して、リポジトリには含まれないようにします。

プロジェクトの構造

QIITA/
│
├── data/
│ ├── qiita_popular_articles.csv - Qiitaの人気記事データ(コード実行時に生成されます。)
│ └── qiita_shimada_articles.csv - 私自身の記事データ(コード実行時に生成されます。)
│
├── generated/
│ ├── detailed_generated_article.txt - 詳細な内容が追加された記事ファイル(コード実行時に生成されます。)
│ └── generated_article99.txt - 初期生成された記事ファイル(コード実行時に生成されます。)
│
├── src/
│ ├── langchain-qiita.py - 言語モデルを扱うスクリプト
│ └── qiita.py - Qiita APIを扱うスクリプト
│
├── venv/ - Pythonの仮想環境ディレクトリ
│
├── config.ini - プロジェクト設定情報を保持するファイル
└── requirements.txt - プロジェクトの依存関係リストファイル

各ディレクトリとファイルの詳細

  • data/

    • Qiita APIから取得した記事の生データが保存される
    • 分析や記事生成のための入力データとして使用
  • generated/

    • このディレクトリには、AIによって生成された記事のドラフトと完成形が保存される
    • ドラフトはさらなる編集やレビューを経て、最終的な記事となる
  • src/

    • ソースコードを含むメインのディレクトリ
    • 実際のプログラムのロジックやAPIとのインタラクションを扱うスクリプトが含まれている
  • test/

    • 開発中にプログラムの動作を検証するためのテストコードが格納される場所
  • venv/

    • Pythonの仮想環境に関連するファイルが置かれるディレクトリ
    • プロジェクトの依存関係を隔離して管理するために使用される
  • config.ini

    • プロジェクトの設定を管理するファイル
    • APIキーなどの機密情報を含むため、ソースコードのリポジトリには含めないように注意が必要
  • requirements.txt

    • プロジェクトで必要とされるPythonパッケージがリストされている

最後に

私自身まだまだ勉強中なので、何か問題を見つけたり、もっといい方法があれば、勉強したいので教えてください!
ここまで読んでいただき、ありがとうございました!
次回は実際のコードを公開します。後編(3/18に投稿予定)もよろしくお願いします。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2