YouTube関係のGitリポジトリを試してみたメモ

環境：MacBook Pro (16-inch, 2019) & macOS Catalina 10.15.7

## dineshssdn-867/Sentiment_analysis_of_youtubers_webapp

https://github.com/dineshssdn-867/Sentiment_analysis_of_youtubers_webapp

- 結果：利用できず
- 中身はDjango（Python）で作成されている
- 判断ポイント：ルート（最上位階層）またはバックエンド用のディレクトリに「manage.py」があること

### 前提

- Python3の環境（パッケージマネージャpip3含め）が構築できていること
- `pipdeptree` をインストールして依存パッケージを調べておく  
  [\[Python\] パッケージの依存関係を調べる](https://e-tec-memo.herokuapp.com/article/167)

### 起動方法

ターミナルにて

1. `$ git clone https://github.com/dineshssdn-867/Sentiment_analysis_of_youtubers_webapp.git`  
  もしくはどこかのフォルダにZIPダウンロードして解凍
2. `$ cd Sentiment_analysis_of_youtubers_webapp`
3. `$ pip3 install django django-pwa psycopg2-binary ktrain tensorflow TBB PyQt5`
4. `$ python3 manage.py runserver`

ここで通常なら起動するがエラーが発生する：

> ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject

原因はNumPyの最新バージョンでC向けAPIが使えなくなったためにNumPyに依存する周囲の他パッケージがエラーを吐いていることによる。

https://zenn.dev/ymd_h/articles/934a90e1468a05

今回のエラーは `sklearn.utils.murmurhash` にて発生しているため、対象の `scikit-learn` を公式案内の方法で再インストールする。  
<https://scikit-learn.org/0.16/install.html>

自分の環境はMac OS Xのため `pip install -U numpy scipy scikit-learn` を実行したのち、もう一度Django起動を試してみる。

```sh
Exception: Failed to load .preproc file in either the post v0.16.x loction (models/my_new_predictor_emotion/tf_model.preproc) or pre v0.16.x location (models/my_new_predictor_emotion.preproc)
```

モデル `my_new_predictor_emotion.preproc` を読み込めなかったとのことだが、公開されているこの機械学習データと思しきものが見つからなかったためここで断念。

### 参考

https://qiita.com/Shirokuma_0607/items/db30765b9aa9374cd676

## jacob-ian/TranscryptApp

https://github.com/jacob-ian/TranscryptApp

- 結果：すぐ起動可能
- Angular.js + TypeScript 構成
- 判断ポイント：ルートディレクトリに「angular.json」がある。（また、GitHub右カラムにある言語構成で7割ほどが "TypeScript" となっている）

### 起動方法

1. `$ git clone` & `$ cd `（割愛：1つ目を参考に）
2. `$ npm i` で依存関係をインストール
3. `$ npm run start` でサーバーを起動  
  Angularの場合デフォルトで <http://localhost:4200/> でサーブされる。

### 結果

![Screen Shot 2021-06-22 at 1.02.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116011/52f9e922-c9b0-195f-da58-ca0489c7fe28.png)


### 参考

https://qiita.com/str416yb/items/f2ef4d7a4a7c7bab3e0b

## yatharthrawat/React-Django_YoutubeCommentAnalysis

https://github.com/yatharthrawat/React-Django_YoutubeCommentAnalysis

- 結果：起動するがGoogle認証関係のファイルが無いエラーが出る。
- まず `backend` と `frontend` の2フォルダがあることから、フロントとバックの2つにシステムが分かれていることがわかる。それらの中身をのぞくと、バックエンドは1つめリポジトリと同様でDjango(Python)、フロントエンドはNode.jsであることがわかる。
- 判断ポイント：frontendディレクトリには `package.json` があり、backendディレクトリには `manage.py` がある。

### 前提

- pipenvをインストールしておく  
  `$ pip3 install pipenv`
- 環境によってはデフォルトのPythonのパスを指定しておく必要がある  
  `$ pipenv --python /usr/local/bin/python3`（PCによる）

### バックエンド

1. `$ cd React-Django_YoutubeCommentAnalysis/backend`
2. 依存関係のパッケージをまとめてインストールする  
  `$ pipenv install`
3. それでもまだインストールしきれない依存関係がいろいろとあるので、エラーが出次第でインストール。こちらの環境では次のようになった：`$ pip3 install django-cors-headers djangorestframework django-rest-utils google-api-python-client`
4. このままだとホワイトリストURLのスキームがおかしいというエラーが出るため、 `Comment_API/settings.py` の75〜77行目の3行を以下と置き換えて上書き保存。

  ```python
  CORS_ORIGIN_WHITELIST = [
    'http://localhost:3000'
  ]
  ```
  これができたら `$ python3 manage.py runserver` でバックエンドを起動したままにしておく。<http://127.0.0.1:8000/> でアクセス可能となるはず。

https://github.com/adamchainz/django-cors-headers/issues/403

### フロントエンド

バックエンド起動状態で、新しいターミナルから実行：

1. `$ cd React-Django_YoutubeCommentAnalysis/frontend`
2. `$ npm i` で依存関係をインストール
3. `$ npm run start` でサーバーを起動
4. こちらの環境では自動的に「Google Chrome」で<http://localhost:3000/>を開く動作を確認できた。

### 結果

![Screen Shot 2021-06-22 at 2.30.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116011/aa3b12f8-f2b4-adba-6abd-6ab58b8af70a.png)

Webアプリとして起動はするが、YouTubeのURLをいれるとバックエンド側でエラーが出る。

```sh
File "/usr/local/lib/python3.9/site-packages/google_auth_oauthlib/flow.py", line 203, in from_client_secrets_file
    with open(client_secrets_file, "r") as json_file:
FileNotFoundError: [Errno 2] No such file or directory: 'client_secret.json'
```

見たところでは、GoogleのAPIを自分で設定して `client_secret.json` に自分のAPIのシークレットを入れなければいけないような感じの仕様になっているっぽい。これ以上はタイムアウト（すみません）