YouTube Data API v3 使ってみた!①

お久しぶりです。peaceです。
今回は、「YouTube Data API v3」を利用し、
信州大学公式YouTube【shinshuweb】https://www.youtube.com/user/shinshuweb
のデータを取得しようと思います!

今回やりたいことの全体の流れ(超ざっくりと)

1.Google Cloud Platform への登録
2.APIキーの取得
3.信州大学公式YouTube【shinshuweb】のチャンネルIDの取得
4.信州大学公式YouTube【shinshuweb】のいろんなデータ取得

今回の投稿の内容

1.Google Cloud Platform への登録

1.Google Cloud Platform への登録

 今回使用する「YouTube Data API v3」は、「Google Cloud Platform」への登録が必要とです。登録には、Googleアカウントとクレジットカード、電話番号、インターネット環境が必要となります。
 「YouTube Data API v3」と「Google Cloud Platform」については↓をご覧ください。

YouTube Data API v3 とは?

Youtube動画を取得できるAPI(API=プログラムとシステムを繋げる仕組み。今回の場合はプログラムとYouTubeの動画。)です。
特定のキーワードやチャンネルの動画を取得することや、動画の統計情報を取得することができます!

Google Cloud Platform とは?

Googleがクラウド上で提供するサービスの総称です。
データ分析や機械学習、コンピューティングなど、様々なサービスが利用できます!

 

PythonでWebスクレイピング(後編)

おしながき

  • 今回やりたいこと
  • 作る順番
    1. ライブラリのインストール
    2. コーディング
    3. Pandasを使って、CSV形式での保存
  • まとめ

今回やりたいこと

今回やりたいこととしては、

学校情報サイトから、「学校名」「生徒数」「住所」をスクレピングしていきたいとおもいます。そして、最後にはPadansを使って、CSV形式で保存するところまでやっていきたいと思います。

順序は

  • ライブラリのインストール
  • コーディング
  • Pandasを使って、CSV形式での保存

大まかに分けてこの3つになります。少し長くなってしまうかもしれませんが、ゆっくりやっていきましょう!

作る順番

1.ライブラリのインストール

今回使用するライブラリは「requests」「Beautifulsoup 」「pandas」「time」の4つです。webスクレイピングというと「selenium」もBeautifulsoup と同様に人気で使われていますが、今回は使用しないです。

インストールを行っていない方は

pip install requets
pip install pandas
pip install Beautifulsoup

をコマンドプロンプトでやっていただければインストールをできます。

2.コーディング

下のものが本編になります

#今回使うライブラリ
import time 
import requests
from bs4 import BeautifulSoup
import pandas

#スクレイピングをするサイト
#URLは今回は伏せておきます
url='@@@@@@@@@@@@@@@@@@@@@@@@@@@'

#requestsを使って、URL先の情報を取得
res=requests.get(url)
soup=BeautifulSoup(res.text,'html.parser')
school_list=soup.find_all('li',attrs={'class':'school_list_city'})


for details in school_list :
    school_details={}
    sdd=details.find('div',attrs={'class':'school_detail_data'})
    school_name=sdd.find('p',attrs={'class':'school_name'}).find('span').text
    shcool_item=sdd.find('p',attrs={'class':'item'})
    total_students=shcool_item.find('span',attrs={'class':'border_underline'}).text
    ads=sdd.find('p',attrs={'class':'item position'})
    ad=ads.find('span',attrs={'class':'small'}).text

    school_details['学校名']=school_name
    school_details['生徒数']=total_students
    school_details['住所']=ad
    data.append(school_details)
    time.sleep(2)

コードがきれいに書けていないかもしれませんが、まだまだ勉強中の身なので、ご容赦していただければと思います

少し解説をさせていただくと

ところどころに「~.find(‘@@’),attrs={‘class’:’%%%’}」と言った記述がたくさんあると思います。これを抑えることができたら簡単なスクレイピングは可能かと思います。

これを日本語変換してみると「~の中の一番最初の@@タグのclassの%%%を指定します!」といった感じです。HTMLというデータはとても大きいものなので、一気に操作を行うのではなく、少しづつ絞っていくとやりやすいのではないかと思います。

3.Pandasを使って、CSV形式での保存

スクレイピングをしたデータをpandasを使って、DataFrameに格納し、それをCSV形式で保存することは一見難しそうに見えますが、案外簡単です。

#pandasを使って、DataFrameに格納
df=pd.DataFrame(data)
#CSV形式で保存
df.to_csv('学校の情報.csv',index=False,encoding='utf_8_sig')

この2行だけで終わりです。少し解説をさせていただくと、「index=False」というのは、DataFrameに格納した際にインデックス番号が同時に付与されるのですが、「CSV形式で保存するときにそのインデックス番号はいらないよー」ということです。

まとめ

かなり駆け足でBeautifulsoup を使ったWebスクレピングを紹介していきました。高校情報Ⅱの教員研修資料にも今回のBeautifulsoup を使ったWebスクレイピングは紹介され、今後必要なスキルの一つになるのではないかと思います。

また、プログラミングは様々な勉強ツールがあります。今回は私が勉強するときに使用したYouTubeの動画のURLを載せておきたいと思います。勉強するときの助けになればいいなと思います。

PythonでWebスクレイピング(前編)

おしながき

  1. Webスクレイピングとは?
  2. Webスクレイピングを行うときに注意すべきこと
  3. まとめ

1.Webスクレイピングとは?

Webスクレイピングの定義を調べてみると、、、

Webスクレイピング(Webデータ抽出、スクリーンスクレイピング、Webデータ収集とも呼ばれる)は、Webサイトから大量の情報を自動的に抽出するコンピュータソフトウェア技術のことです。データの多くはHTML形式の非構造化データで、これをスプレッドシートやデータベースの構造化データに変換することで、さまざまなアプリケーションに利用することができます。Webスクレイピングの主な使用例としては、価格監視、価格情報、ニュース監視、リードジェネレーション、市場調査などが挙げられます
引用:https://www.octoparse.jp/blog/web-scraping/#div1

といったように、インターネット上の情報をプログラムを使って、大量に抽出することを指します。抽出されたデータは「.xlsl」や「.csv」の形式で出力され、市場調査やデータ分析等に使われます。今回行うことは、Pyhtonでwebスクレイピングを行いますが、最近では、ノーコードでもWebスクレイピングを行うことができます。一例ではありますが「Octoparse」といといったサービスもあります。興味がある方はぜひともチェックしていただきたいと思います。

2.Webスクレイピングを行うときに注意すべきこと

 Webスクレイピングはとても便利な反面、注意すべき点ももちろんあります。それは

  • サーバへの負荷をかけすぎない
  • そのサイトがスクレイピングをしても問題ないか

これらのことを最低限注意しなければなりません。

 1つ目のサーバへの負荷については「間隔を開けてアクセスする」ことが一番手っ取り早いと思います。Pythonであれば

import time
for i in range(5):
    print(i)
    time.sleep(1.0)

のように、1秒ごとの間隔をあける工夫をすることで、負荷を減らすことができます。難しいことではないと思うので、思いやりの心を持ってやっていただけたらと思います。

 2つ目の「そのサイトがスクレイピングをしても、問題がないか」についてはしっかりと確認する必要があります。今回は有名なスクレイピングを行ってはいけない代表的なサイトを紹介したいと思います。

  • Amazon
  • Rakuten(楽天)
  • Twitter、Instagram、FacebookなどのSNS

これらのサイトの他にもスクレイピングを行ってはいけないサイトはたくさんあります。なので、行う前に対象のサイトの「利用規約」をしっかりと確認することが大切です。これら無視した場合「偽計業務妨害罪」に問われる可能性があります。更に細かいことは下のリンクに書いてあったので、気になる方はスクレイピングを行う前に確認してもらうといいと思います。

3.まとめ

Webスクレイピングは大変便利な半面、怖い観点もあります。なので、サイトに迷惑をかけない範囲で行うことが重要なのかと思います。後編では実際にどうやってスクレイピングを行うのかを解説をしたいと思います。

Webページの作成

おはようございます。magnetです。

ずっと前に以下のページで streamlit を使ったWEBページを紹介しました。

(興味があればこちらもご覧下さい!)

そこで、今回はレポート作成に役立つようなサイトを作りたいと考え、

文字数カウントサイト

なるものを作りました。

https://share.streamlit.io/maglill/saisyonoyatu/main/mojisuu.py

上記のURLから飛ぶことが出来るので一回見てみて下さい!

これはサイト名通り、Wordなどに書いた文字をコピー&ペーストしてカウントボタンを押すと文字数をカウントしてくれます。

WordとかGoogleドキュメントに文字数を数えてくれる機能があるのは知りません笑

改善点としては英単語とかは文字数ではなく単語数が主流なので、正確に数えてくれません。

例えば、yesは3文字、weは2文字、canは3文字というようになります。

あくまで文字数ですからね~……

気分によって使い分けてみては?

最後に、コードを貼って終わりとします。ここまでご覧頂きありがとうございました!

import streamlit as st

st.title('文字数カウントサイト')
st.write('')
#ただの改行
'このサイトは入力された文章の文字数をカウント出来るサイトです。'
'「文字数足りてるかな?」と思ったら活用してみて下さい。'
st.write('')
#ただの改行

text=st.text_input('↓ ↓ ↓  入力してね  ↓ ↓ ↓')
#これ1つでテキストボックスも完備。

st.write('')
#ただの改行

n=len(text)
#textをnと置く。

if n==0:
    st.write('文字が入力されていないよ。')
    #未入力の時

if st.button('カウント'):
    st.write('文字数は',n,'です。')
    #ボタン押したとき文字数表示
    if n==0:
        st.write('nothing in the textbox. are you kidding me :△')    
    elif 1100<= n <=1300:
        st.write('およそA4一枚程度だよ。')
    elif 20000<= n <=40000:
        st.write('おおよそ卒業論文の文字数だよ。')
    else:
        st.write('')

授業で作ったWebアプリケーション②

こんにちは、今回は前回の続きとして、私が作ったWebアプリケーションの簡単な解説を続けようと思います。

前回からの続きになるので、まだ見ていない方は下のリンクから見てみてください!↓↓

前回までは、GooglebooksAPIについて初学者ながら解説を行いました今回はAPIを使う上で必然的に出てしまうエラーに対処する方法について考えてみたいと思います。

まず、今回作りたいプログラムのおさらいをしたいと思います。

今回作りたいアプリケーションの条件

言語:python3.8.8

やりたいこと:GoogleBooksAPIを活用して、検索ツールの作成

ほしい検索結果:本の題名・本の著者・発売日・ページ数・紹介文・購入まで飛ぶことができるURL・検索結果の本の画像

前回は、GoogleBooksAPIの使い方について扱いました。今回は、APIを経由して検索をかけた際に、エラーが出てしまうときがあるのでそれの対処について扱いたいと思います。

考えられるエラー

検索をかけた時、GoogleBooksにない書籍を検索をかけた場合、KeyErrorと出てきます。これをそのままにしておくのは利用者の立場からすると、使いにくいと思われます。

それに対処するために、try~exceptを使いたいと思います。(Python公式の解説はこちら

この関数はわかりやすくすると、「エラーが起きた時にする動作を決める」ことができます。

使い方は、「tryの中に、errorが起きなかった時の動作」「exceptの中に、errorが起きた時の動作」を書くだけです。難しい定義も必要ないので、簡単に実装することができます。

for i in range(0,1) :
   url = 'https://www.googleapis.com/books/v1/volumes?q='+tool+want  #GooglBooksAPI
   response = requests.get(url).json() #情報の取得,json変換
   totalitems = response['totalItems'] #件数1
   try :
       items_list = response['items'] #items リストデータ
       items = items_list[i] #items
       info = items['volumeInfo']
       print(response)
       title = info['title']
       pagelink = info['canonicalVolumeLink']
       description = info['description']
       print('紹介文が見当たりません')
       print('タイトル:', title)
       print('URL',pagelink)
       print('~~~~~~~~~~紹介文~~~~~~~~~~~~~')
       print(description)
       print('')
       print('')
       pic=info['imageLinks']['thumbnail']
       print(pic)
   except KeyError:
       print('検索結果がみつかりませんでした')
       print('もう一度試してください')
       sys.exit()
       pass

こんな感じで、検索結果が見つからない場合には「KryError」が出た場合の動作を決めることができました。

これでほとんどの難しい箇所が終わったと思います。

では次のWebアプリケーション③に続きます

ありがとうございました。

Webアプリケーションを作りました

こんにちは。
信州大学 教育学部 小倉研2年の peace です。

大学の情報の授業で、Webアプリケーションを作成しました。
是非、下のURLからアプリケーションを利用していただければと思います。
URL:https://share.streamlit.io/i-yuki1218/peace_2346/main/streamlitworks1.py

中身が気になる方は、以下のコードをご覧下さい
(参考になるかは分かりませんが,、主要部分のみ載せておきます,,,)

ソウルナンバー診断の一部を公開!参考になれば幸いです(*^o^*)

あっ、作品の説明がまだでしたね、、、
今回のWebアプリケーションでは「ソウルナンバー診断」ができます!
生年月日を打ち込むだけで正確や相性が診断ができるので、
家族や友達と楽しんでいただけたらと思います!(年末年始の集まりで盛り上がるかも?)

授業で教材?を作りました!!

こんにちは!magnetです。

最近寒くなりましたね。外気温が低くて研究室がなかなか温まりません。

そんなご時世ですが頑張っていきましょう!

 

それでは本題に……

最近の授業で「streamlitを使ったサイトを作ろう」という課題が出ました。

私は迷ったあげく以下のサイトを作りました。

一回訪問してみて下さい。決して怪しいサイトではないので!!

https://share.streamlit.io/maglill/saisyonoyatu/main/sagi.py

下のコードは、是非参考にして下さい!

import time
import streamlit as st
from PIL import Image

st.title("おめでとうございます。")
st.write("あなたは2021年間ビジターアンケートの参加者に選ばれました!")
st.write("Chrome「ありがとう」を込めてApple iPhone 13 Pro が当たる")
st.write("チャンスを差し上げます!")

#iPhineの画像入れる。
img=Image.open('sumaho.png')
st.image(img, caption='iPhone13Pro',use_column_width=True)

st.write('iPhone13Pro')
st.write('定価:¥146800')
st.write('期間限定:¥500')

st.write("")
st.write("")
st.write("以下の質問に答えて下さい。")
st.write("")

option=st.selectbox("1日に約何時間ネットを見ますか?",list(['1','2','3','4','5','それ以上']))
option=st.selectbox("普段何時間SNSを見ますか?",list(['1','2','3','4','5','それ以上']))
option=st.selectbox("普段何時間動画を見ますか?",list(['1','2','3','4','5','それ以上']))

st.write("")#改行のためにおいた。
st.write("")

status_area = st.empty()

# カウントダウン
count_down_sec = 10
for i in range(count_down_sec):
    # プレースホルダーに残り秒数を書き込む
    status_area.write( f'あと {count_down_sec - i}   秒で自動的に申請されます。')
    # スリープ処理を入れる
    time.sleep(1)

status_area.write('回答を送信しております。しばらくお待ち下さい。')

latest_iteration = st.empty() #空コンテンツと⼀緒に変数を作成
bar = st.progress(0)#プログレスを作る 値は0
for i in range(100):
    latest_iteration.text(f'Iteration{i+1}')#空のIterationにテキストを⼊れていく
    bar.progress(i +1)#barの中⾝をぐいぐい増やしていく
    time.sleep(0.01)
    
st.write("申請が完了しました。")

st.write("")
st.write("")
st.write("")
st.write("")
st.write("")
st.write("")

st.text("以下にあなたの情報を入力して下さい。")
st.text_input("お名前")
st.text_input("住所")
st.text_input("電話番号")
st.text_input("連絡の取れるメールアドレス")
st.write("")
st.text_input("何か要望があればお書き下さい。")

st.write("")
st.write("")
st.write("")
st.write("")
st.write("")
st.write("")

#回答送信ボタン
st.text('※回答送信には時間がかかります。')
if st.button('送信'):
    st.balloons()
    st.write("")
    st.write("")
    st.write("")
    st.write("")
    st.write('本部への送信が完了致しました。')
    st.write('お届け予定日は4月1日以降です。')
    st.balloons()
else:
    st.write('')

 

 

ね?怪しくなかったでしょ?

これ、情報モラルとかそういうとこで教材として使えると思うんです。(まだ不完全ですが)

無断使用全然OKなので困ったら是非使ってみて下さいね!

 

と、言うことでmagnetがお伝えしました~!

授業で作ったwebアプリケーション①

こんにちは、今回は授業で作ったWebアプリケーションの紹介・解説を行いたいと思います。

言語:python3.8.8

やりたいこと:GoogleBooksAPIを活用して、検索ツールの作成

ほしい検索結果:本の題名・本の著者・発売日・ページ数・紹介文・購入まで飛ぶことができるURL・検索結果の本の画像

GoogleBooksAPIについて

このAPIをつかうことで、GoogleBooksに検索を行い、レスポンスとして、リスト形式のレスポンスが返答される。もともとはJavaScriptで使われるAPIであるためpythonで使うときにはひと工夫が必要となる。

url = 'https://www.googleapis.com/books/v1/volumes?q='+tool+want  #GooglBooksAP
response = requests.get(url).json() #情報の取得,json変換

この2行でGoogleBooksにアクセスして、解答を得ることができます。そして、responseにリストとして、入っています。jsonというのは、GoogleBooksAPI自体がJavaScriptで使用することを前提に作られているので、それをpythonで使えるようにするためにjson変換を行い使えるようにしています。

toolの中には代表的なものですが、以下のような検索方法があります

intittleタイトル
inauthor著者
isbnISBN(10桁または13桁両方とも可能)
記入なしフリーワードで調べることが可能
toolの中身

ほかにもありますが、このくらいが代表的であると思います。wantの中身は検索したい方法に基づいたキーワードを入力すると検索できます。responseで返ってくるリストはとても複雑そうに見えますが、簡単にすると「リスト・辞書」の連続になります。

私はプログラミング初学者であり、まだまだ未熟ものですが、コードを書いてみたので、参考になるかわかりませんが、もしよかったら参考にしてください。

url = 'https://www.googleapis.com/books/v1/volumes?q='+str(tool)+str(want)  #GooglBooksAPI
response = requests.get(url).json() #情報の取得,json変換
totalitems = response['totalItems'] #件数1
print('検索結果は',str(totalitems),'件です')
for i in range(0,5) :
    items_list = response['items'] #items リストデータ
    items = items_list[i] #items
    info = items['volumeInfo']
    title = info['title']
    pagelink = info['canonicalVolumeLink']
    description = info['description']
    pagecount=info['pageCount']
    authors=info['authors'][0]
    publishdate=info['publishedDate']
    pic=info['imageLinks']['thumbnail']

詳しいことは、Googleから公式に詳細が記載されているので、下のリンクからご覧ください。

https://developers.google.com/books/docs/v1/using

次回に続きます。

ロゴを作成しました!

こんにちは。
信州大学 教育学部 小倉研2年の peace です。

作品紹介ページの記念すべき第1回目の投稿は、、、

「ロゴ」

です🎉

今後、小倉研究室の “顔” となる大切なものを、研究室メンバーがプレゼンしました。


今後も、様々な作品を紹介していくので、よろしくお願いします。