• 検索結果がありません。

マッシュアップ(プログラミング演習)

N/A
N/A
Protected

Academic year: 2021

シェア "マッシュアップ(プログラミング演習)"

Copied!
31
0
0

読み込み中.... (全文を見る)

全文

(1)

マッシュアップ

(

プログラミング演習

)

ウェブコンピューティング 20201223

(2)

今後の予定

• 1/13(

)

:最終発表会

中間発表会の「

(1)

調査課題」を踏まえ、「

(2)

プログラ ミング課題」の進捗状況を報告してもらいます

• 1/6(

)

演習

• 1/15(

) 17:00

課題提出〆切

ウェブコンピューティング-プログラミング演習- 2020/12/23

2

【重要】最終発表会のスライド(pdf or pptx)を 次々回1/13の講義開始までに用意して

USBメモリなどで持参してください

詳しくは3~6頁を参照してください(乾)

(3)

重要:

1/13

最終発表会

調査課題とプログラミング課題の進捗状況の簡単な発表会

発表はひとり12分(時間厳守)

スライド(pdf or pptx)を(遅くとも)次々回1/13の講義開始まで に用意してください

1. 調査課題

新しいWebサービスのアイデアの紹介

概要、貢献(良さ・面白さ)

どんなWebサービスをどのように組み合わせるか

2. プログラミング課題

プログラム開発の状況

動作画面等のスクリーンショット(できれば)

入力と出力がわかるように

動いているところまでのもので構いません

デモのURLなど

合わせて13枚でOK

主にこっちの話

(になると思われる)

(4)

中間発表会との違い(スライドの内容)

「プログラミング課題」の進捗状況を報告

まずは、ざっくりと調査課題を説明

次にプログラミング課題の「どのレベル」に取り組ん でいるかを宣言

その後、プログラミング課題の進捗状況を報告

ウェブコンピューティング-プログラミング演習- 2020/12/23

4

プログラミング状況 ターミナル上の動作 ブラウザ上での動作 プログラミングの進捗に応じて適当なスクショをスライドに入れる

(5)

スライドの提出方法

できれば前日までに提出しておいてください

→ 当日ギリギリまで粘らなくて良い

ファイル名を「学籍番号

(

大文字

)_(

以降任意

)

グーグルクラスルームへ提出 アンダーバー

(6)

スライドの提出時の注意点

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

(7)

本日の話

少し発展的な内容

使いたい

API

が無いんですけど・・・・

– Web

アプリ化ってどうやるの?

(2)

プログラミング課題(いずれか一題を選択)

基本 難しい そこそこ 易しい

Pythonプログラミ ングの基本

(×マッシュアップ)

マッシュアップ の基礎 ウェブアプリ

ケーション の基盤 ウェブアプリ

ケーション

サンプル

主に竹・松の課題向け

(8)

使いたい

API

を見つけられなかったら

ウェブコンピューティング-プログラミング演習- 2020/12/23

8

世の中にあるAPIの種類・探し方は分かったけど、

どうやってWebサービスを作ろう?

世の中にあるAPIでは自分のアイディアを実現で きそうにない

設計・開発の基本

スクレイピングしてみよう!

前々回の話

(9)

使いたいサービスの

API

がない!!

• API

がなかったらスクレイピングしてみよう

例:みんなのシネマレビューからレビューを抽出する

スクレイピング

html

ファイルから

<table>

要素だけ抜き出す

レビュー リスト

(10)

実装例: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/cgi­bin/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

の解析

(11)

スクレイピングの際の注意

• DoS

攻撃

サーバーに過剰な負荷をかけたることで、サービスを 妨害する攻撃

やりすぎると、

IP

アドレス等でフィルタリングされる

(周りにも迷惑がかかる可能性がある)ので注意

サンプルは `time.sleep(5)` で対応 → 5秒待つ

• JavaScript

のスクレイピングはちょっと面倒

直接

URL

アクセスするだけでは、目的の情報を取得でき ない

(仮想的に)ブラウザ経由でアクセスするようにする

• selenium.webdriver.PhantomJS() など

(12)

提出締切:

1

15

日(金)

17:00 –

提出先:グーグルクラスルーム

演習・レポート課題(計

2

題)

ウェブコンピューティング-プログラミング演習- 2020/12/23

12

(1)

調査課題

(2)

プログラミング課題(いずれか一題を選択)

基本 難しい そこそこ 易しい

難易度

復習

(13)

(2)

プログラミング課題

(

)

• Web

サービスを実際に行うプログラムを作成せよ

– (1)

調査課題において提案したサービスに限る

– Web

ブラウザで動くものは作らなくて良い

コンソール上での処理のみで構わない

プログラムの概要(特に何を入出力とするのか)

利用した

Web

サービスの情報

プログラムのソース

実行例(3つ以上)

考察

工夫した点,苦労した点,問題,感想等

レポートの内容

復習

(14)

(2)

プログラミング課題

(

)

• Web

サービスを実際に行うプログラムを作成せよ

– (1)

調査課題において提案したサービスに限る

– Web

ブラウザ上で動作するもの

プログラムの概要(特に何を入出力とするのか)

利用した

Web

サービスの情報

プログラムのソース

作成した

Web

サービスの

URL –

実行例(3つ以上)

考察

工夫した点,苦労した点,問題,感想等

ウェブコンピューティング-プログラミング演習- 2020/12/23

14

レポートの内容

復習

(15)

松・竹の間には・・・

まず、ローカルホスト(自

分の

PC

内で実行してその

PC

のブラウザ)でアプリを 動かす

サーバー上へアプリを アップロードし、アプリを

URL

アクセスで動くように セットアップする

Step1

Step2

実はそれなりのギャップがある

正しい手順を踏んで作ろう!

(16)

サーバーサイドの基本的な構成

ウェブコンピューティング-プログラミング演習- 2020/12/23

16

ユーザ

静的HTML

APサーバ WEBアプリケーション DB Request

Response

WEBサーバ

動的生成HTML

サーバサイドは

4

つのソフトウェアで構成する ことが多い

サーバーサイド

(17)

サーバーサイドの基本的な構成

ユーザ

静的HTML

APサーバ WEBアプリケーション DB Request

Response

WEBサーバ

動的生成HTML

WEBサーバ : HTTPリクエストを処理しレスポンスを返す

サーバーサイド

ソフトウェアの例: Apache2, Nginx

(18)

サーバーサイドの基本的な構成

ウェブコンピューティング-プログラミング演習- 2020/12/23

18

ユーザ

静的HTML

APサーバ WEBアプリケーション DB Request

Response

WEBサーバ

動的生成HTML

WEBサーバ :

サーバーサイド

クエリがないリクエストなら静的なHTMLを返す

(リバースプロキシを使う)

高速化・負荷の軽減のため(WEBサーバの処理は早い)

(19)

サーバーサイドの基本的な構成

ユーザ

静的HTML

APサーバ WEBアプリケーション DB

Request Response

WEBサーバ

動的生成HTML

APサーバ : WEBサーバとフレームワーク間の通信を担当する

サーバーサイド

ソフトウェアの例: Gunicorn, uWSGI

(20)

サーバーサイドの基本的な構成

ウェブコンピューティング-プログラミング演習- 2020/12/23

20

ユーザ

静的HTML

APサーバ WEBアプリケーション DB Request

Response

WEBサーバ

動的生成HTML

WEBアプリケーション :

サーバーサイド

ソフトウェアの例: PHP, Ruby on Rails, Django, Flask,…

リクエストから動的にHTMLを生成する 様々な処理(今回の実験ではAPIの実行)

(21)

サーバーサイドの基本的な構成

ユーザ

静的HTML

APサーバ WEBアプリケーション DB Request

Response

WEBサーバ

動的生成HTML

データベース : データを蓄積する・参照できるようにする

サーバーサイド

ソフトウェアの例: MySQL, PostageSQL, mongoDB, Redis, …

(22)

今回の実験では

リクエストを元に

API

を実行

• API

の結果を反映した

HTML

を返す

ウェブコンピューティング-プログラミング演習- 2020/12/23

22

WEB

アプリケーションまでは必要

• WEB

フレームワークに小規模な

WEB

サーバが ついていることがある

簡単なテストをするには便利

本番環境で使ってはいけない

この後のサンプルではこれを使用している

(23)

Web

サーバーでアプリを動かすためには

✓ Step1.

ローカルホストで動かす

– CGI

– Flask

Jinja2

という

html template

エンジンが強力

– Pyramid

– Django

✓ Step2. Web

サーバーで動かす

計算機室サーバー

さくらサーバー

– AWS

– Microsoft azure – Heroku

サンプルは、

Flask + Heroku

(24)

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

を入力すると・・・

結果が出力された!

(25)

Web

サーバーでアプリを動かすためには

✓ Step1.

ローカルホストで動かす

– CGI – Flask – Pyramid – Django

✓ Step2. Web

サーバーで動かす

計算機室サーバー

さくらサーバー

– AWS

– Microsoft azure – Heroku

サンプルは、

Flask + Heroku

Webサーバー環境を弄れないので python だと厳しい

Webサーバーを含めた)サーバーの セットアップが必要→難しい&面倒

Gitで管理でき、かつ無料で使える(制限はある)

(26)

Heroku

• https://www.heroku.com/home

ウェブコンピューティング-プログラミング演習- 2020/12/23

26

↓python

以外でも使える

(27)

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

(28)

Heroku

で必要な設定ファイル

アプリケーションのルートディレクトリに(最低 限)以下のファイルが必要

– Procfile

P

は大文字にすること!)

実行するアプリケーションやアプリケーションの実行方 法を記述するファイル

– requirements.txt

アプリケーションが依存するライブラリ

• pip freeze > requirements.txt とかで作る

– runtime.txt

実行するpythonのバージョンを指定

ウェブコンピューティング-プログラミング演習- 2020/12/23

28

詳しくはホームページや解説記事参照

(29)

実例:

app.py

Heroku

で動かしてみた

ローカルホスト版

(30)

今後の予定

• 1/13(

)

:最終発表会

中間発表会の「

(1)

調査課題」を踏まえ、「

(2)

プログラ ミング課題」の進捗状況を報告してもらいます

• 1/6(

)

演習

• 1/15(

) 17:00

課題提出〆切

ウェブコンピューティング-プログラミング演習- 2020/12/23

30

【重要】最終発表会のスライド(pdf or pptx)を 次々回1/13の講義開始までに用意して

USBメモリなどで持参してください

詳しくは3~6頁を参照してください(乾)

(31)

演習

わからないところがあれば

TA

にどんどん聞いてく ださい!

この

API

使いたいんだけどどうやって使えばいいのかわ かんない

……

サンプルのこの部分ってどういう意味?

そもそも

Python

がわからない などなどお気軽に!

• TA

と連絡先(基本は全員にCcしてください)

浅妻 佑弥:asazuma.yuya.r7 [at] dc.tohoku.ac.jp

• Li Yunmengli.yunmeng.r1 [at] dc.tohoku.ac.jp

参照

関連したドキュメント

 外部コンテンツの場合  Facebookサイトでユーザを一元管理しているので,訪問者のユーザ ID取得やクリックユーザ数のカウントが可能

f90 –o hello.out hello.f を実行してみる。 Hello.out が生成されていることを確認し、 ./hello.out を実行 してみる。 ( 順番は問わず、

debian.org/) は、様々なプログラミング 言語のプログラムの速度や行数を比較し たサイトである。 C, Java, SML,

コンピュータには一連の計算を手順に沿って順序

 ファイルポインタ ファイルポインタ FP FP のファイルから、 のファイルから、 B B UF UF に、 に、 SIZE SIZE バイト、 バイト、 COUNT COUNT 回読み込 回読み込 む

ある型 ある型 (例えば、 (例えば、 struct Car struct Car 型) 型) が、 が、 実際にどのよう 実際にどのよう

Web に掲示した mpi2-report.c の指示に 従って、関数 mpi_iszero(), mpi_iseq(), mpi_isgt(), mpi_islt() の実装を完成させ ること。.

引数として幾つかの値を渡し、一定の処理をし て、値を返す …… 関数. ‹