腕時計スタンド作成!

こんにちは!

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

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

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

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

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

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

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

LINEのAPIを使いこなそう!

LINEのAPIを知っているでしょうか?現代ではLINEはほとんどのスマホユーザーが利用しています。1つのツールとしてLINEのAPIを知っていると課題解決の方法が広がると思います。今回はLINEのAPIの導入方法を紹介したいと思います。

おしながき

  1. LINEのAPIの活用事例
  2. LINENotifyについて
    • Notifyの概要
    • 使い方(実装する直前まで)
    • やってみた
  3. LINE Messaging API SDK
  4. まとめ

LINEのAPIの活用事例

LINEのAPIを活用すると本当にたくさんのことができるようになります。公式LINEの仕様を変更することや、チャットボットの作成、アンケート集計などなど多岐にわたります。もちろんこのようなシステムは複雑でレベルも高いです。しかし、「メッセージを送るだけ」なら簡単にできます。なので、制作活動の中で必要な機能を少しずつできるようになれば、いずれ複雑なものを作れるようになると思います。

LINE API USE CASE」にはLINE が公式に公開しているAPIの活用法になります。レベルがとても高いですが、見てみると想像が膨らむと思います!

LINENotifyについて

Notifyの概要

LINENotifyはご存じでしょうか?

LINENotifyというのは「Webサービスからの通知をLINEで受信するツール」です。もう少し詳しく解説すると「Webサービスと連携すると、LINEが提供する公式アカウント”LINE Notify”から通知が届きます。複数のサービスと連携でき、グループでも通知を受信することが可能です。」となります。

LINENotifyサイトはこちら

LINENotify API Documentはこちら

Notifyの使い方(実装する直前まで)

ここでは、Notifyの「サービスへの登録」→「送信するルームの選択」→「トークンの発行」までを行いたいと思います。

LINENotifyのサイトはこちら

やってみた

import requests

TOKEN = 'トークンをペーストしてください'
url = 'https://notify-api.line.me/api/notify'
send_contents = 'LINE大好き'

TOKEN_dic = {'Authorization': 'Bearer' + ' ' + TOKEN} 
send_dic = {'message': send_contents}
requests.post(url, headers=TOKEN_dic, data=send_dic)

このコードを実行すると、先程決めたトークルームに「LINE大好き」と送られます。また、少しコードを増やすと画像も一緒に送信できるので、やってみてください!

この方の動画がとてもわかりやすいので、参考になると思います。

LINE Messaging API SDK

前のブロックでは「LINENotify」を扱いました。これは簡単に使えるので、とても便利な反面、できることにどうしても制約があります。今回紹介する「LINE Messaging API SDK」ではできることが格段に増えます。

できることの一例

LINECLOVAなどのAIとの 連携

LINEミニアプリでの活用

LINEPay決済ツールとの 連携

他サービスとLINEログインの連携

MessagingAPIを活用し双方向性のコミュニケーション

などなど、LINEサービスを使い尽くすことができます。

もちろん言語もほとんど網羅されいて、GitHubでAPIリファレンスが公開されています。URLはこちら

MessagingAPIではLINENotifyとは異なり、より多くの人にメッセージを送信でき、双方向性があるので、チャットボットの作成やAIも組み込むことができたら面白そうですね!

まだ、わからないことが多く、導入例などは今回は紹介しないのですが、今度作成したら紹介したいと思います。

まとめ

今回はLINEのAPIサービスの紹介を行いました。「LINENotify」は簡単に導入できるので、一度試してみる価値は全然あると思います!また、MessagingAPIもメッセージを送信するだけなら難しくはなく、Youtubeの動画などを参考にしたら活用できると思います

また、LINEのビジネス用アカウントでは、メッセージ配信もできるので、チャックしてみるのもアリかもしれません。

今回のブログを通じて、LINEのAPIサービスを使うきっかけになればと思います。

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

新しい年がやってきました

あけましておめでとうございます。新しい年がやってきました。小倉研究室にとっては今年は重要な年になりそうです。2021年4月に発足したこの研究室ですが、喜ばしいことに2022年4月には新しい仲間がやってきます。

それではこの研究室でこの年にやろうかなと考えていることをここに書いておきます。

今年の野望

1.ホームページのクオリティの向上

2.研究室としての何かしらの作品の製作

3.個人のスキルアップ

4.健康維持

この感じで頑張っていきたいなと思います。しかし、これらはすべて漠然としたものであって、具体的ではないです。これからゆっくりとそれぞれが考え、行動しこのブログに報告・記録をしていきたいと思っています。

このホームページもどんどん新しくなっていきます。

定期的なチェックをお願いします!!!

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

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

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

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

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

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

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

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

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

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

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

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

授業で作った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アプリケーション①

こんにちは、今回は授業で作った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年生、です。

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

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

無頓着な高校生

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

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

筆者ゆう