- RSS の記事(内容)をjsonとして返すAPIを目指す
- 返すRSSの特徴
- ジャンル分けをして、ジャンルに合ったものを返す(とりあえずwindows news用)
- さまざまなRSSから、上記のジャンルに合ったものを抽出する
- APIとして実装したい機能
- RSS feedのURLを追加・削除する
- その日のさまざまなRSS記事の内容をジャンルで厳選してJsonで返す
- 学習データの追加および学習・削除
- RSSを厳選する方法
- ナイーブベイズを使って簡単な機械学習で行う(マシンスペックが許せば将来的には深層学習も使うかもしれない)
- frp: https://github.com/fatedier/frp
- ポート解放ができないローカルのサーバ公開のために使用
- DB: Prostgres
-
デプロイするサーバにmecabの辞書
mecab-ipadic-NEologd
をインストールする- 方法は公式に従う: https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
$ echo
mecab-config --dicdir"/mecab-ipadic-neologd"
で辞書が確認できればOK
-
checkoutしてくる
$ git clone [email protected]:cacaoMath/rss_collect_api.git
$ git checkout ${デプロイするバージョンタグ名}
- .envファイルに必要な値を入力する
.env.sample
を例にする
- deploy.shを叩く
- deploy.shで必要なDockerfileのビルドや辞書のコピーなどが行われる。
- deploy完了、localhost:8000などで接続できるか確認する
- pipenvでパッケージ管理しているためインストールしておく
pipenv install --dev
で開発に必要なパッケージ込みでインストール可能- 内部処理に使用してる
mecab-ipadic-NEologd
は別で要インストール - DBはDockerで立ち上げられる
cp docker-compose.yml.sample docker-compose.yml
の後にdocker-composeで立ち上げる
.env
にDB情報などの記入が必要なので.env.sample
を参考に記入し作成する。
/docs
or/redoc
で詳細の確認が可能- POST,UPDATE,DELETEの処理はBASIC認証が必要
/rss
は例外とする
/feeds
: GET- 登録しているRSS feed URLの一覧表示
/feeds/{feed_id}
: GET- {feed_id}のRSS feed URLの表示
/feeds/{feed_id}
: UPDATE- {feed_id}のRSS feed URLの更新
/feeds/{feed_id}
: DELETE- {feed_id}のRSS feed URLの削除
/feeds
: POST- RSS feed URLの登録
/learning-data
: GET- 学習データの一覧表示
/learning-data/{data_id}
: GET- {data_id}の学習データを表示
/learning-data/{data_id}
: UPDATE- {data_id}の学習データを更新
/learning-data/{data_id}
: DLETE- {data_id}の学習データを削除
/learning-data
: POST- 学習データの追加
/categories
: GET- 登録されているカテゴリ(ジャンル)の一覧表示
/classifier
: GET (学習モデルが保存できる場合に実装)- 機械学習モデル更新日出力
/classifier/predict
: POST- テキストのジャンルを推定
/rss
: POST- 分類器を使用して、POSTしたジャンルで集められた記事のタイトル、日付、URLなどをJSONで返す
- RequesBody: JSON
{"categories": ["string1", "string2", ...]}
- "categories"にはGET
/categories
得られる値から、得たい記事のジャンルをlistで入れる。
- "categories"にはGET
- url: str
- valid
- length: 255
- null: false
- valid
- description : str | None
- valid
- length: 255
- valid
- is_active
- valid
- default: True
- valid
- word: str
- valid
- length: 255
- null: false
- valid
- category_id: Categoryのデータに紐づくid
- category : Categoryとリレーション
- category: str
- valid
- length: 30
- null: false
- 使用できる文字: a-z,A-Z,0-9,-
- valid
- docsのschemasを参照
- 簡単に実装するためsklearnにあるものを使う
- 精度を高めるために、BOWや正規化などの前処理は行う
- 参考
-
Skleanで推定
-
前処理
-
FASTAPI CRUD
-
Sqalchemy
-
- 比較的新言語に対応していると思われる以下の辞書を使用する。Mecabなどは手順通りに入れる
- feedparserを使う
- pytestを使用
- 参考