nikkie-ftnextの日記

イベントレポートや読書メモを発信

翔泳社祭2021をPythonを使って満喫する

はじめに

千葉の名物、踊りと祭り!同じ阿呆なら踊らにゃ sing a song! nikkieです。
昨日・一昨日はデブサミお疲れさまでした!
デブサミと合わせて翔泳社祭が開催されています(2/25(木)まで!)

こういったセールで対象本がスプレッドシートで公開されているのがもの珍しく、せっかくなのでPythonで満喫することにしました1

f:id:nikkie-ftnext:20210220182918p:plain

目次

Pythonを使って満喫する流れ

  1. 公開されているスプレッドシート2のデータを取得し、ローカルに保存する
  2. 条件を指定して、検索してみる

お祭り参加準備

スプレッドシート上のデータ取得は、ダウンロードでもよいですが、「なるべく自動化したい」とSheets APIを叩く方法を選択しました。
※準備が煩わしく感じる方は、csvやxlsx形式でダウンロードして、検索にガッツリ取り組んでもいいと思います👍

Googleアカウントがあれば、以下の手順でお祭りの参加権を得られます。

  1. Google Cloudのコンソールが見られるように設定します
    • 記憶が曖昧ですが、Googleアカウントがあれば、無料トライアルとして使い出せると思います3
  2. 必要に応じてプロジェクトを作ります
  3. プロジェクトを選択して、Sheets APIを有効にします4

Pythonの動作環境として以下を準備しました5

gspread              3.7.0
jsonlines            2.0.0

公開されているスプレッドシートのデータ取得

Sheets API (v3) のラッパーライブラリ、gspreadを使います。

認証には2通りの方法があります:

  • サービスアカウントを使う
  • OAuthクライアントIDを使う

対象のスプレッドシートをサービスアカウントに共有することで、プログラムから読み書きできるようになります。
今回のスプレッドシートは公開されており、サービスアカウントがそもそも共有できるのか不明でした6
そこで、OAuthクライアントIDを選びました。

OAuthクライアントIDの設定

新規プロジェクトを作って設定したところ、以前よりもステップ数が増えていました。

  1. 「OAuth 同意画面」をまず設定する(設定していないとOAuthクライアントIDが発行できない)

    • User type: 外部(Google Workspaceでないと内部は選べないようです)
    • スコープは絞って設定しても、gspreadのデフォルトの設定で上書きされるようでした
    • Test users: 設定しないとGoogleアカウントでのログインがそもそも許可されず、gspreadがうまく動きませんでした7。だいぶ厳しくなった印象です f:id:nikkie-ftnext:20210220184652p:plain
  2. 「認証情報」のうち「OAuthクライアントID」を作成する

gspreadを使って、スプレッドシートにアクセス

import gspread

gc = gspread.oauth()
sh = gc.open_by_key("1ayVJ3dXDosu4kQFTQ6fA8Q9LhpgCfh0S26KeWGq6MPU")  # 翔泳社祭のスプレッドシートのID
worksheet = sh.worksheet("全点")
list_of_lists = worksheet.get_all_values()

list_of_listsは1行を表すリストのリストです。
1行目の空行を無視したり、辞書形式に整形したりしてからローカルに保存します。
保存したデータを読み込んで、検索や絞り込みを実装すればいいですね!

対象本データを見て

カテゴリ①(H列)の取る値

PC技術_専門: 336
ビジネス_専門: 204
IT資格: 151
PC技術_入門: 146
クリエイティブ: 134
ビジネス_入門: 115
PC一般: 104
生活実用: 81
一般資格: 68
理工書: 63
医療福祉: 51
福祉資格: 30
一般書: 28

スプレッドシートで各カテゴリ1-2冊見ると、私の興味関心は

  • PC技術_専門
  • PC技術_入門

482冊でした。

PC技術本にしぼった時にカテゴリ②(I列)の取る値

プログラミング・開発: 188
ネットワーク・サーバ: 79
開発管理: 61
Webプログラミング: 43
データベース: 35
人工知能・機械学習: 31
LINUX・UNIX: 14
パソコン一般: 9
データサイエンス: 8
ハードウェア・自作: 8
デザイン: 2
子どもプログラミング: 2
パソコンソフト: 1
ゲームプログラミング: 1

入門と専門を合わせてカテゴリ②の取るあたいを見ています。
「プログラミング・開発」カテゴリは入門が多いのかもしれません(仮説)。

💰お買い得本リスト

一律50%オフなので、高いものほどこの機に買うのがお得ということになりますね。
PC技術本を通常価格+税(F列)の降順に出してみます。

割引額が大きいトップ20はこちら!!
※URLの有無やメモは見ていないので、求めている形態で買えない可能性もあります。

『実用Common Lisp』 ¥9200
『詳解UNIXプログラミング 第3版』 ¥8300
『C++プライマー 第5版』 ¥7800
『ストラウストラップのプログラミング入門』 ¥7800
『エンタープライズアプリケーションアーキテクチャパターン』 ¥5800
『マスタリングVMware vSphere 5.5』 ¥5800
『ディジタル回路設計とコンピュータアーキテクチャ 第2版』 ¥5400
『コンピュータネットワークとインターネット 第6版』 ¥5400
『Oracleデータベースセキュリティ セキュアなデータベース構築・運用の原則』 ¥5200
『実践ドメイン駆動設計』 ¥5200
『アジャイルソフトウェア要求』 ¥5200
『ディシプリンド・アジャイル・デリバリー エンタープライズ・アジャイル実践ガイド』 ¥5200
『エリック・エヴァンスのドメイン駆動設計』 ¥5200
『Splunkユーザーのためのデータ分析実践バイブル SPLとMLTKを駆使した前処理から機械学習の手続きまで』 ¥5000
『低レベルプログラミング』 ¥4800
『Akka実践バイブル アクターモデルによる並行・分散システムの実現』 ¥4800
『CRI ADX2で作るゲームサウンド制作ガイド [CRI ADX2公式ガイド]』 ¥4800
『DirectX 12の魔導書 3Dレンダリングの基礎からMMDモデルを踊らせるまで』 ¥4600
『ブラウザハック』 ¥4600
『プログラマのためのSQL 第4版 すべてを知り尽くしたいあなたに』 ¥4600

存在に気づいていなかった本も含まれていたので、祭りを満喫しようと取り組んでみてよかったなと思います😃

アジャイルソフトウェア要求

アジャイルソフトウェア要求

終わりに

こういったセールでのスプレッドシートの公開、めちゃめちゃありがたいですね!
翔泳社さん、ありがとうございます。
他の出版社さんのセールでもスプレッドシートで公開していただけたら探しやすくて助かります。

なお、スプレッドシートの機能に「Webに公開(publish)」があります。

publishしたスプレッドシートのURLにalt=jsonを指定するとJSON形式でシートの内容が取得できます8
publish版も用意してもらえると喜ぶ人は増えそうです。

スプレッドシートをノーコードツールと組み合わせればWebアプリもできるわけですよね。
次回のお祭りでは今回ここでやったような計数や検索が可能な、Webアプリが公開されているかもしれませんね。


  1. Pythonを使ったのは好みです。Sheets APIの呼び出し、または、CSVの読み取りができればいいので、Pythonに限らずお好きな言語でお祭りを楽しんでください!

  2. https://docs.google.com/spreadsheets/d/1ayVJ3dXDosu4kQFTQ6fA8Q9LhpgCfh0S26KeWGq6MPU/edit#gid=0

  3. https://cloud.google.com/getting-started?hl=ja

  4. 別のヘルプですが、操作方法の参考として。(Google Sheets APIだけ有効にすれば済みます) https://support.google.com/workspacemigrate/answer/9222865?hl=ja

  5. ローカルに保存するファイル形式にjsonlinesを選択しました

  6. サービスアカウントは未検証です。うまく行ったら教えてください

  7. gspreadGoogleアカウントでログインできると、認証情報を保存します。以降はそれを自動で更新して使うようです

  8. ref: Google Sheets as JSON Endpoint. Section 1: Creating a Google Sheet | by Clark Jason Ngo | Medium