マッシュアップ
(
プログラミング演習)
ウェブコンピューティング 2020年12月23日
今後の予定
• 1/13(
水)
:最終発表会–
中間発表会の「(1)
調査課題」を踏まえ、「(2)
プログラ ミング課題」の進捗状況を報告してもらいます• 1/6(
水)
演習• 1/15(
金) 17:00
–
課題提出〆切ウェブコンピューティング-プログラミング演習- 2020/12/23
2
【重要】最終発表会のスライド(pdf or pptx)を 次々回1/13の講義開始までに用意して
USBメモリなどで持参してください
詳しくは3~6頁を参照してください(乾)
重要:
1/13
最終発表会調査課題とプログラミング課題の進捗状況の簡単な発表会
• 発表はひとり1〜2分(時間厳守)
• スライド(pdf or pptx)を(遅くとも)次々回1/13の講義開始まで に用意してください
1. 調査課題
✓ 新しいWebサービスのアイデアの紹介
– 概要、貢献(良さ・面白さ)
– どんなWebサービスをどのように組み合わせるか
2. プログラミング課題
✓ プログラム開発の状況
✓ 動作画面等のスクリーンショット(できれば)
– 入力と出力がわかるように
– 動いているところまでのもので構いません
✓ デモのURLなど
• 合わせて1〜3枚でOK
主にこっちの話
(になると思われる)
中間発表会との違い(スライドの内容)
•
「プログラミング課題」の進捗状況を報告–
まずは、ざっくりと調査課題を説明–
次にプログラミング課題の「どのレベル」に取り組ん でいるかを宣言–
その後、プログラミング課題の進捗状況を報告ウェブコンピューティング-プログラミング演習- 2020/12/23
4
プログラミング状況 ターミナル上の動作 ブラウザ上での動作 プログラミングの進捗に応じて適当なスクショをスライドに入れる
スライドの提出方法
•
できれば前日までに提出しておいてください→ 当日ギリギリまで粘らなくて良い
•
ファイル名を「学籍番号(
大文字)_(
以降任意)
」•
グーグルクラスルームへ提出 ↑ アンダーバースライドの提出時の注意点
1. スライドには表紙を用意し、表紙内に名前と学籍番号を記載すること 2. ファイル名は「学籍番号(大文字)_(以降任意).pdf or .pptx」
3. USBメモリはLinuxでは認識しない(かもしれない)
– 念のためWindows10を使ってください
4. トラブルが発生したときのために、すぐコピーし直せる用にしておく
– 提出済みでもデータUSBメモリ等で持参してください – 他人が自由に上書きできる(→勝手に消せる)ため
5. 講義最終日のあと、外部から見えない場所へコピーしたのち削除しま す
6. 来年度のウェブコンピューティングの講義でスライドの一部を引用さ せていただく可能性があります
– 名前等の個人情報は出しません
– 「どうしても嫌だ」と言う方はご連絡ください
7. 前述のスライドの方法でどうしても提出できない・したくない場合は、
asazuma.yuya.r7[at]dc.tohoku.ac.jp へスライドを添付して送付する
ウェブコンピューティング-プログラミング演習- 2020/12/23
6
本日の話
•
少し発展的な内容–
使いたいAPI
が無いんですけど・・・・– Web
アプリ化ってどうやるの?(2)
プログラミング課題(いずれか一題を選択)松 竹 梅
基本 難しい そこそこ 易しい
根
Pythonプログラミ ングの基本
(×マッシュアップ)
マッシュアップ の基礎 ウェブアプリ
ケーション の基盤 ウェブアプリ
ケーション
↑サンプル
主に竹・松の課題向け
使いたい
API
を見つけられなかったらウェブコンピューティング-プログラミング演習- 2020/12/23
8
世の中にあるAPIの種類・探し方は分かったけど、
どうやってWebサービスを作ろう?
世の中にあるAPIでは自分のアイディアを実現で きそうにない
設計・開発の基本
スクレイピングしてみよう!
✓
前々回の話使いたいサービスの
API
がない!!• API
がなかったらスクレイピングしてみよう–
例:みんなのシネマレビューからレビューを抽出するスクレイピング
html
ファイルから<table>
要素だけ抜き出すレビュー リスト
実装例:BeautifulSoupでスクレイピング
ウェブコンピューティング-プログラミング演習- 2020/12/23
10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
"""
(https://www.jtnews.jp/) run: python get_movie_review.py >
*** ***
"""
import sys
import urllib.request import time
import json
from bs4 import BeautifulSoup # html
def get_movie_review():
# baseURL
URL = "http://www.jtnews.jp/cgibin/review.cgi"
for NO in range(1, 1000):
# baseURL html
html = urllib.request.urlopen(URL + "?TITLE_NO={}".format(NO)).read() # html parse
soup = BeautifulSoup(html, "html.parser") # lxml html.parser
#
title = soup.findAll("title")[0].get_text().replace(" ", "") #
if len(title) > 0:
t = title else:
time.sleep(2) # dos continue
#
revs = []
count = 0
for rev in soup.findAll("div"):
if "REV_" in str(rev):
revs.append(rev.get_text()) count += 1
if count > 9: # 10 break
# json
d = {"id": NO, "title": t, "reviews": revs}
print(json.dumps(d, ensure_ascii=False))
# for l in sys.stdin; + json.loads﴾l﴾
time.sleep(2) # dos
def main():
get_movie_review()
if __name__ == "__main__":
main()
web
ページ(.html)
の取得取得した
html
の解析スクレイピングの際の注意
• DoS
攻撃–
サーバーに過剰な負荷をかけたることで、サービスを 妨害する攻撃–
やりすぎると、IP
アドレス等でフィルタリングされる(周りにも迷惑がかかる可能性がある)ので注意
• サンプルは `time.sleep(5)` で対応 → 5秒待つ
• JavaScript
のスクレイピングはちょっと面倒–
直接URL
アクセスするだけでは、目的の情報を取得でき ない–
(仮想的に)ブラウザ経由でアクセスするようにする• selenium.webdriver.PhantomJS() など
–
提出締切:1
月15
日(金)17:00 –
提出先:グーグルクラスルーム演習・レポート課題(計
2
題)ウェブコンピューティング-プログラミング演習- 2020/12/23
12
(1)
調査課題(2)
プログラミング課題(いずれか一題を選択)松 竹 梅
基本 難しい そこそこ 易しい
根
難易度
> >
>
復習
(2)
プログラミング課題(
竹)
• Web
サービスを実際に行うプログラムを作成せよ– (1)
調査課題において提案したサービスに限る– Web
ブラウザで動くものは作らなくて良い• コンソール上での処理のみで構わない
–
プログラムの概要(特に何を入出力とするのか)–
利用したWeb
サービスの情報–
プログラムのソース–
実行例(3つ以上)–
考察• 工夫した点,苦労した点,問題,感想等
レポートの内容
復習
(2)
プログラミング課題(
松)
• Web
サービスを実際に行うプログラムを作成せよ– (1)
調査課題において提案したサービスに限る– Web
ブラウザ上で動作するもの–
プログラムの概要(特に何を入出力とするのか)–
利用したWeb
サービスの情報–
プログラムのソース–
作成したWeb
サービスのURL –
実行例(3つ以上)–
考察• 工夫した点,苦労した点,問題,感想等
ウェブコンピューティング-プログラミング演習- 2020/12/23
14
レポートの内容
復習
松・竹の間には・・・
松 まず、ローカルホスト(自
分の
PC
内で実行してそのPC
のブラウザ)でアプリを 動かすサーバー上へアプリを アップロードし、アプリを
URL
アクセスで動くように セットアップするStep1
Step2
•
実はそれなりのギャップがある竹
→
正しい手順を踏んで作ろう!サーバーサイドの基本的な構成
ウェブコンピューティング-プログラミング演習- 2020/12/23
16
ユーザ
静的HTML
APサーバ WEBアプリケーション DB Request
Response
WEBサーバ
動的生成HTML
•
サーバサイドは4
つのソフトウェアで構成する ことが多いサーバーサイド
サーバーサイドの基本的な構成
ユーザ
静的HTML
APサーバ WEBアプリケーション DB Request
Response
WEBサーバ
動的生成HTML
• WEBサーバ : HTTPリクエストを処理しレスポンスを返す
サーバーサイド
• ソフトウェアの例: Apache2, Nginx
サーバーサイドの基本的な構成
ウェブコンピューティング-プログラミング演習- 2020/12/23
18
ユーザ
静的HTML
APサーバ WEBアプリケーション DB Request
Response
WEBサーバ
動的生成HTML
• WEBサーバ :
サーバーサイド
クエリがないリクエストなら静的なHTMLを返す
(リバースプロキシを使う)
• 高速化・負荷の軽減のため(WEBサーバの処理は早い)
サーバーサイドの基本的な構成
ユーザ
静的HTML
APサーバ WEBアプリケーション DB
Request Response
WEBサーバ
動的生成HTML
• APサーバ : WEBサーバとフレームワーク間の通信を担当する
サーバーサイド
• ソフトウェアの例: Gunicorn, uWSGI
サーバーサイドの基本的な構成
ウェブコンピューティング-プログラミング演習- 2020/12/23
20
ユーザ
静的HTML
APサーバ WEBアプリケーション DB Request
Response
WEBサーバ
動的生成HTML
• WEBアプリケーション :
サーバーサイド
• ソフトウェアの例: PHP, Ruby on Rails, Django, Flask,…
リクエストから動的にHTMLを生成する 様々な処理(今回の実験ではAPIの実行)
サーバーサイドの基本的な構成
ユーザ
静的HTML
APサーバ WEBアプリケーション DB Request
Response
WEBサーバ
動的生成HTML
• データベース : データを蓄積する・参照できるようにする
サーバーサイド
• ソフトウェアの例: MySQL, PostageSQL, mongoDB, Redis, …
今回の実験では
…
•
リクエストを元にAPI
を実行• API
の結果を反映したHTML
を返すウェブコンピューティング-プログラミング演習- 2020/12/23
22
WEB
アプリケーションまでは必要• WEB
フレームワークに小規模なWEB
サーバが ついていることがある•
簡単なテストをするには便利•
本番環境で使ってはいけない•
この後のサンプルではこれを使用しているWeb
サーバーでアプリを動かすためには✓ Step1.
ローカルホストで動かす– CGI
– Flask
→Jinja2
というhtml template
エンジンが強力– Pyramid
– Django
✓ Step2. Web
サーバーで動かす–
計算機室サーバー–
さくらサーバー– AWS
– Microsoft azure – Heroku
サンプルは、
Flask + Heroku
Step1.
ローカルホストで動かす(Flask
)ウェブコンピューティング-プログラミング演習- 2020/12/23
24
1 2 3 4 5 6 7 8 9 10 11 12
import os
from flask import Flask app = Flask(__name__)
@app.route("/") def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
app.py
ターミナル上で実行
↑URL
(IP
アドレス)が表示されるブラウザに
URL
を入力すると・・・結果が出力された!
Web
サーバーでアプリを動かすためには✓ Step1.
ローカルホストで動かす– CGI – Flask – Pyramid – Django
✓ Step2. Web
サーバーで動かす–
計算機室サーバー–
さくらサーバー– AWS
– Microsoft azure – Heroku
サンプルは、
Flask + Heroku
Webサーバー環境を弄れないので python だと厳しい
(Webサーバーを含めた)サーバーの セットアップが必要→難しい&面倒
Gitで管理でき、かつ無料で使える(制限はある)
Heroku
• https://www.heroku.com/home
ウェブコンピューティング-プログラミング演習- 2020/12/23
26
※
↓python
以外でも使えるHeroku
を使うまでの流れ1. Heroku
に登録2. Heroku-toolkit
をインストール→
OS
によって導入方法が異なるので説明省略3.
(Flask
なら)pip
でgunicorn
をインストール4.
作成したプログラム & 設定ファイルをGit
で「
init -> add -> commit
」5. Heroku toolkit
の機能でI. heroku login II. heroku create
III. git push heroku master
Heroku
で必要な設定ファイル•
アプリケーションのルートディレクトリに(最低 限)以下のファイルが必要– Procfile
(P
は大文字にすること!)• 実行するアプリケーションやアプリケーションの実行方 法を記述するファイル
– requirements.txt
• アプリケーションが依存するライブラリ
• pip freeze > requirements.txt とかで作る
– runtime.txt
• 実行するpythonのバージョンを指定
ウェブコンピューティング-プログラミング演習- 2020/12/23
28
詳しくはホームページや解説記事参照
実例:
app.py
をHeroku
で動かしてみたローカルホスト版
今後の予定
• 1/13(
水)
:最終発表会–
中間発表会の「(1)
調査課題」を踏まえ、「(2)
プログラ ミング課題」の進捗状況を報告してもらいます• 1/6(
水)
演習• 1/15(
金) 17:00
–
課題提出〆切ウェブコンピューティング-プログラミング演習- 2020/12/23
30
【重要】最終発表会のスライド(pdf or pptx)を 次々回1/13の講義開始までに用意して
USBメモリなどで持参してください
詳しくは3~6頁を参照してください(乾)
演習
•
わからないところがあればTA
にどんどん聞いてく ださい!–
このAPI
使いたいんだけどどうやって使えばいいのかわ かんない……
–
サンプルのこの部分ってどういう意味?–
そもそもPython
がわからない などなどお気軽に!• TA
と連絡先(基本は全員にCcしてください)• 浅妻 佑弥:asazuma.yuya.r7 [at] dc.tohoku.ac.jp
• Li Yunmeng:li.yunmeng.r1 [at] dc.tohoku.ac.jp