PythonのUdemyパッケージを使ってUdemyのコースにあるレクチャーの一覧を取得しcsvで保存する


# はじめに

私はUdemyというサイトを利用してよく学習します。

購入したコースが増えてきた結果、複数のコースで同じ内容のレッスンを扱っているケースも出てきました。
なのであるコースのレッスンが十分に理解できなかった場合に別のコースで似た内容を扱っているならそれを見て補足するという事がしたくてコースで扱うレッスンの一覧を作成する事にしました。

コースを開いてレッスンを全て選択してテキストエディターに貼り付けるという事を以前やっていましたがアナログ感があったので勉強をかねてPythonを使って一覧を取りPandasに格納して最期にcsvで保存します。

# 事前準備

- Udemy APIの申請
- Udemy packageのインストール
- Pandas packageのインストール
- 環境変数の設定

## Udemy APIの申請

Udemyパッケージは内部的にUdemy APIを使っており、APIを使うにはclient id と Client secret取得の為APIの申請が必要です。

[https://www.udemy.com/](https://www.udemy.com/)

![Screenshot_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1240232/0148ae1d-6557-9793-148f-575f291ba047.png)

申請が許可されたら上記のページにクライアントIDとクライアントシークレットが表示されます。

## Udemy packageのインストール

[Udemy](https://github.com/r3ap3rpy/udemy)というパッケージを使います

```pip install udemy```

## Pandas packageのインストール

```pip install pandas```

## 環境変数の設定

Udemyパッケージは環境変数にClient IDとClient Secretが設定されている前提で動作するので設定が必要です。
ここではWindowsでの方法です。

1. システム環境変数の編集を開く<br>
![Screenshot_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1240232/1c263b06-ba18-e30c-81f3-0ae4308df2b7.png)
1. 環境変数を開く<br>
![Screenshot_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1240232/2ca1e55b-30aa-e3d9-c452-44d51ca4c303.png)
1. udemyClientID の設定<br>
![Screenshot_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1240232/341b7c61-8ce5-c649-7ebe-097176a36f35.png)
1. udemyClientSecret の設定<br>
![Screenshot_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1240232/826c217f-952c-8fa7-1369-de7519076262.png)

# レッスン一覧取得手順

- ここでは無料の下記のコースのレッスン一覧を取る例を行います
- 赤枠の部分はコース詳細を取る際に必要な文字列です

[はじめてのAI](https://www.udemy.com/course/google-jp-ai/)

![Screenshot_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1240232/f683adc9-aa51-d923-08c7-eb82b3d760f6.png)


大まかな流れは下記の通りです

1. cource-detailからコースIDの取得
    - レッスン一覧を取るためにコースIDが必要なようですがどこにIDがあるのかわからなかったのでこのAPIから取っています
1. publiccurriculum-listからレッスンのリストを取得
1. csvで保存

## コード

```python
import json

import pandas as pd
from udemy import *

# コースタイトル
cource_key = "google-jp-ai"
# page_size 一度に取得するレッスンの情報数(最低12最大100)
page_size = 12

# Udemyオブジェクトを作成
Client = PyUdemy()
# コース詳細を取得
cource_detail = json.loads(Client.get_coursesdetail(cource_key))

i = 1

while True:
    result = json.loads(Client.get_publiccurriculumlist(cource_detail["id"],page=i,page_size=page_size))
    i+=1
    # Dataframeをまだ作成していなければ作成。そうでなければ前の結果と今回の結果を結合する
    try:
        df
    except NameError:
        df = pd.DataFrame.from_dict(result["results"])
    else:
        df = pd.concat([df, pd.DataFrame.from_dict(result["results"])])
    if result["next"] is None:
        break
# csvで保存
df.to_csv("result.csv")
```

# 結果

保存したcsvを Google spread sheetにインポートした図です。

![Screenshot_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1240232/0d74f749-7bf7-42bb-aec7-243bf8269c78.png)

title以外にもいろいろありますが、各列の解説を見つける事が出来なかったので勝手に解釈しました。
間違えているかもしれませんが下記のような列があります

項目名 | 意味 
 --- | --- 
 _class　| Chapter or lecture or quiz
 id　| id
 created　| 作成日
 sort_order　| ?
 title　| タイトル
 description　| 説明
 is_published　| 公開中
 title_cleaned　| ?
 transcript　| ?
 is_downloadable　| ダウンロード可能かどうか
 is_free　| 無料公開しているかどうか
 asset　| 動画の情報
 can_be_previewed　| プレビューで見れる動画か
 type　| ? 
 object_index　| ?
 is_draft　| 下書きかどうか
 version　| Version
 duration　| ?
 pass_percent　| 進行率

# メモ

## 関連情報

- Udemy API document

https://www.udemy.com/developers/affiliate/

- パッケージ作成者が使い方を紹介している動画

https://www.youtube.com/watch?v=bDReiUgPv_4

- コース詳細APIで取得できる情報

https://www.udemy.com/developers/affiliate/models/course/