YouTube Data API v3 使ってみた!②

こんにちは。小倉研3年のpeaceです。
大変お待たせしました! 2ヵ月ぶりですね( ´∀` )
「YouTube Data API v3 使ってみた!」の第2弾です!

「まだ第1弾を見てない!」という方はこの記事を読む前にこちらを↓
https://www.mogura-lab.com/783

それでは第2弾スタート!

やりたいことの全体の流れ(超ざっくりとおさらい)

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

今回の投稿の内容

2.APIキーの取得
3.信州大学公式YouTube【shinshuweb】のチャンネルIDの取得

2.APIキーの取得

今回は、前回登録した「Google Cloud Platform」から「APIキー」を取得していきます。

APIキーの取得

「APIとサービス」という場所から「認証情報」を選択するとAPIキーが取得できる画面にすすめます。
ここでAPIキーを取得するときに、画面下側の「APIの制限」で有効なAPIキーを今回利用する[Youtube Data API v3]のみに設定しておくとGoodです!

3.信州大学公式YouTube【shinshuweb】のチャンネルIDの取得

ここからは、信州大学の公式YouTubeである[shinshuweb]のチャンネルIDを取得していきたいと思います。

YouTubeのチャンネルIDとは?

どのYouTubeチャンネルにも設定されている識別子(多くの対象の中から特定の1つを識別・同定するため用いられる名前や符号、数字等)のことです。

今回は、大量にあるYouTubeチャンネルの中から[shinshuweb]を見つける際にチャンネルIDが必要となります。

それでは、チャンネルIDの取得に使用したコードを載せておきます。
詳細は、コード中のコメントアウトを見てください。

次回からは、いよいよデータの取得をおこなっていきます!
しかし、Google Cloud Platformの体験期間が残り10日!
そして、今週末の3連休(7/16~18)が授業で全部つぶれるといった過酷なスケジュールなので、できたところまで載せる形になるかもしれません…
とりあえず、がんばるので次の投稿を待ってていただけたらと思います!

皆さんも、Google Cloud Platformの体験期間を使うときには計画的にご利用ください(笑)

最後までご覧いただきありがとうございました!

腕時計スタンド作成!

こんにちは!

今回は腕時計のスタンドを作成しました!久しぶりの木材加工はとても難しく、自己評価30点です笑

ぱっと見た感じでは、なかなか良い感じにできたと思ったのですが、角度を変えて見てみると

この作品のたくさんのミス

  • ボンドでの強制結合
  • 釘をミスして木材が割れる
  • 鉋をかけたにも関わらず、平らではない面 などなど

いっぱい欠陥がありました。しかしながら、本体を置く台座を回すことができるので、角度の調整ができるなど、良い面もあります!手作り感があることで、結果的に良い感じです。

次作るときは、もっとしっかり作りたいです、、、

たまにはまったりしたブログもありかな。最後まで読んでいただきありがとうございます。

ラズパイを用いたNFCリーダの作成③

前回までは、ラズベリーパイとモジュールの接続の方法や、仕組みなどを説明してきました。まだ、見ていない方は見てみてください。

今回は、実際にPythonのコードとどんなことに気を付けてコードを書いたかを残していきたいと思います。

おしながき

  • 使うライブラリ一覧
  • メインのコード
  • LINEを送信するためのコード
  • MFRC522を読み込むためのいろいろなファイル
  • まとめ

以上5本立てでいきます。

使うライブラリ一覧

今回使うライブラリは

インストールしてください!

メインのファイル

  • time
  • sympy

LINEの送るファイル

  • line-bot-sdk
  • json

NFCを読み込むファイル

  • sys

これらが使用するライブラリになります。timeやsysといった有名ライブラリはanacondaパッケージに入っていますが、line-bot-sdkといったマイナーなライブラリはパッケージに入っていないので、ターミナルやコマンドプロンプトからインストールしましょう!

メインのコード

import linebot2
from time import sleep
import sample

memberlist={'000000000000':'20e18AA','1111111111111':'20e18BB','222222222222':'20e18CC'}
#memberlistには'タグの12桁':'管理したい学籍番号'の順番で記述

membercount={'20e18AA':0,'20e18BB':0,'20e18CC':0}
#membercountは入退室を管理する番号
 
while True :
    id_num = sample.read()
    print(id_num)
    number= str(id_num))
    print(memberlist)
    try :
        input_count = memberlist[number]
        #print('input_count:',input_count)
        #input_count(学籍番号)
        for i in membercount.keys() :
            if input_count == i :
                membercount[i]=membercount[i]+1
                if membercount[i]%2==1 :
                    message=i+'入室しました'
                    linebot2.main(message)
                    print('Complete')
                    sleep(3)
                    break
                else :
                    message=i+'退室しました'
                    linebot2.main(message)
                    print('Complete')
                    sleep(3)
                    break
            else :
                continue
    except KeyError:
        input_new=input('新しく登録しますか?_はい→1いいえ→2')
        if input_new=='1':
            input_name=0
            input_figure=input('学籍番号を教えて下さい(半角英数字)')
            membercount[input_figure]=input_name
            memberlist[number]=input_figure
            print('登録できました')
            sleep(5)
            continue
        else:
            print('はじめからやり直してください')
            sleep(5)
            Continue

この長いのが今回のメインのコードになります。前回のブログでの登録していないタグが来たときにも、新しく辞書に追加できるように仕様を変更しました。基本的にはwhileで回しながら、分岐をしていく簡単なものです。書き方がかなり乱雑ですが、一応動きます!

LINEを送信するためのコード

import json
from linebot import LineBotApi
from linebot.models import TextSendMessage


file=open('info.json','r')
info= json.load(file)

CHANNEL_ACCESS_TOKEN=info['CHANNEL_ACCESS_TOKEN']
line_bot_api=LineBotApi(CHANNEL_ACCESS_TOKEN)
def main(message):
    messages=TextSendMessage(text=message)
    line_bot_api.broadcast(messages=messages)
{CHANNEL_ACCESS_TOKEN":"ここにアクセストークンをペースト",
"USER_ID":"ここにユーザIDをペースト"}

 ここでは、LINEを送信するためのコードになります。ポイントはJsonファイルを使用しています。JsonファイルでユーザIDとアクセストークンを保存することで、スマートになるのかなと思います。

 Pythonファイルでは、Githubに公開されているものから使用する部分を残したものになります。一つ変更点があります。、公式ドキュメントの例では、「line_bot_api.push_message」となっていますが、「line_bot_api.broadcast」に変更することです。push_messageではUserIDの1番先頭の人にしかLINEが送られません。今回は、複数名に入室のLINEを送信したいので、push_messageでは要件に合いません。しかし「line_bot_api.broadcast」に変更することによって、全員に送信することになるので、非常に便利です。

MFRC522を読み込むためのいろいろなファイル

この隣のファイルは前回のブログでも紹介したGitHubのファイルになります。前回のブログからダウンロードした場合にはダウンロードは不要です。このファイルの中には追加でSample.pyのファイルがあります。そのファイルは今回の「入退室システム」用に引数や、return値をいじったものなので、使用する際には活用していただけたらと思います。

まとめ

以上が「入退室システム」のコードになります。繰り返しになりますが、コードの書き方が綺麗ではなく、見にくい箇所や回りくどい書き方や間違っているが多々あると思います。そのときには、良い感じにしていただいて使っていただけたらと思います。

一つの作成を通じて、Pyhtonだけでなく、LINEについて、ラズベリーパイについて、たくさんの学びにつながりました。教育学部技術科の範疇は超えているかもしれませんが、このような学びを行うことができて良かったと思います。

以上で「ラズパイを用いたNFCリーダの作成」終了です。

ラズパイを用いたNFCリーダの作成①

どうもこんにちは、NFCを皆さんご存じでしょうか?身近なところだと、Suicaなどの交通系ICやUNIQLOやGUなどの会計の時に自動でアイテムを識別してくれるのもNFCの技術が用いられています。

さて今回作っていくのは、「ラズベリーパイ」「NFC」を組み合わせて、研究室の入退室システムを作っていこうと思います。

おしながき

  • システム要件
  • 今回使用するNFCリーダのモジュールについて
  • 通知方法について
  • まとめ

システム要件

今回のシステム要件(作りたいもの)は以下の通りです。

  • 言語はPython
  • NFCリーダ「MFRC-522 RC522 RFID」の採用
  • カードを読み取ったときにLINEにて通知を行う
  • 複数名での使用を想定

以上が今回作りたいものになります。

今回使用するNFCリーダのモジュールについて

今回使用するNFCリーダはAmzonなどで購入することができる格安モジュールのMFRC-522 RC522 RFIDになります。ここにAmazonのリンクを貼っておきます。

これはとてもお手軽に購入することができるので、チャレンジがしやすいと思います!また、別の方法としてPaSoRi RC-S380を使用する方法もありますが、今回は格安モジュールで作成をしたいと思います。

※格安モジュールでははんだ付けが必要となるので、ご注意いただけたらと思います。

Qiitaの方に別のNFCリーダの記事もあったので、共有します!

https://qiita.com/pf_packet/items/9a50d9f3b1f478930b02

通知方法

通知方法はLINEのAPIを使います。LINEのAPIには「LINENotify」と「LINEMassaging API」がありますが、今回は「Massaging API」を使ってみたいと思います。MassagingAPIはLINENotifyに比べると扱うのが難しいですが、その分できることもたくさんあるので、使いこなせる日が来たら良いなと思います。今回はメッセージを送信するだけなので、LINENotifyでも代用ができます。なので、LINENotifyを使う場合にはアレンジして使っていただけたらとおもいます。 

LINENotify公式サイトはこちら

LINE MessagingAPI公式サイトはこちら

まとめ

今回はこれから作成する作品についてのシステム要件と使用するモジュール、使用するAPIサービスを紹介しました。次回以降からは作成したコードから少しずつ解説も混ぜつつできたらなと思います。また別でLINENotifyは扱いたいなと考えています。

今回はこれで終わります。

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

 

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('')

善光寺で写真を撮ってきたよ

こんばんわ、もうすぐクリスマスでもあり、お正月でもあるこの季節。子供のころはこの季節が一番楽しみでした。最近は秋と春が恋しいです。

現在(2021年12月22日)、善光寺ではライトアップや街頭のイルミネーションを行っています。さらに、同じコースである、信州大学の村松研究室の活動に参加させていただき、ライトアップの活動を一緒にさせていただきました。いつもありがとうございます。

村松先生の研究室のホームページです。いつもありがとうございます。

今回はそんなこともあり、写真をいくつか撮ってきたので、紹介したいと思います!

城山公園からの善光寺
ド派手にライトアップされている善光寺

善光寺の正面ではプロジェクションマッピングを行っていてとてもきれいでした。音楽と光、色も多彩で二回も立ち尽くしてみていました。時間は19時頃でもかなり人も多かったです。

今回は普通に写真を撮影するのではなく、スマートフォンと私が高校生から使っているまだ現役と信じている一眼レフカメラの比較を行いたいと思います。

頑張ってる一眼レフ
現役のiPhone11

同時刻にほとんど同じ位置から撮影したのにも関わらず、見え方がかなり違いますね。一眼レフでは、黒色がはっきりしているのに対して、iPhone11ではかなり鮮やかに見えます。これが補正です。色鮮やかな風景を綺麗に撮りたいときはスマートフォンで、しっかりと黒を出したいときには一眼レフという使い分け方もいいですね。

最後に今回撮影した写真をスライドにして、今回は終わりたいと思います。

新しい一眼レフがさしぶりに欲しくなりました。ありがとうございました。

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がお伝えしました~!

ぼくだいがくせい

地方大学生

こんにちは、

この研究室で活動をこれからなんとなくつづっていこうと思います。

また、地方大学生ならではのことや、教育学部の実態、技術科とは何をするかを書いていけたらなと思います。

無頓着な高校生

自己紹介からお願いします。

地方大学生

自己紹介をしたいと思います。

教育学部所属、2年生、です。

主に情報系を扱っていて、これからワードプレスの使い方や、Pythonについて扱えたらいいななんて思っています。

すべて独学で行っているものなので、情報に誤りがあるかもしれませんが、その際はご了承ください。勉強します。

無頓着な高校生

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

これから、ゆっくりと進めていこうと思うので教育学部志望の方、大学生活に興味がある方はたまに読んでいただけたら嬉しいです。

筆者ゆう