2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-03-26

はじめに

私は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/

Screenshot_1.png

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

Udemy packageのインストール

Udemyというパッケージを使います

pip install udemy

Pandas packageのインストール

pip install pandas

環境変数の設定

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

  1. システム環境変数の編集を開く

    Screenshot_3.png
  2. 環境変数を開く

    Screenshot_4.png
  3. udemyClientID の設定

    Screenshot_5.png
  4. udemyClientSecret の設定

    Screenshot_6.png

レッスン一覧取得手順

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

はじめてのAI

Screenshot_2.png

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

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

コード

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

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

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

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

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?