読者です 読者をやめる 読者になる 読者になる

kentana20 技忘録

技術ネタを中心に、セミナー、勉強会、書籍、会社での出来事を綴っていきます。不定期更新。

Python mini Hack-a-thon #49に行ってきた

先日、友人の @shinyorke さんに飲み会でお誘いいただいて、Python mini Hack-a-thon #49に行ってきたのでレポート。

f:id:kentana20:20141221200407p:plain

  • 日時: 2014.12.20 11:00~19:00 (実際の作業時間は11:30~17:30くらい)
  • 場所: ビープラウドさん(新宿)

ビープラウドさんはPythonの受託開発や、イベントサイトのconnpassでもお馴染みの会社さんですね。


注: 生まれてはじめてPythonを触ったのでいろいろ誤りがあるかもです

環境構築

OSXPython環境を整える

brewpythonをインストール

brewで入れるので以下を実行

$ brew update
$ brew upgrade
$ brew install fontforge --use-gcc --without-python
$ brew install python

brew upgradeFontForgeとXQuartzのエラーが出たのでXQuartzをインストールして、brew install fontforge --use-gcc --without-pythonして、リトライして成功

パッケージ管理pipのインストール

インストールしたらPATHを追加

# python
export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/share/python:$PATH

pipのインストール

$ curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python

とりあえず、ここまででお昼へ。

virtualenvのインストール

Pythonの実行環境を仮想的に作れて、「ローカルマシンを汚さなくて済むので、学習ならこれ良いのでは」とPythonistaの方に教わったので、pipでインストール。

$ pip install virtualenv

Flask

Rubyで言うところのSinatra的存在と聞いたので、Flaskを使ってチュートリアルしながら、カンタンなWebアプリを作る。

仮想環境

virtualenvを使って仮想環境を作る

$ cd hogehoge # 適当な作業ディレクトリに移動
$ virtualenv env
$ source env/bin/activate

これで、カレントディレクトリに env というディレクトリが作られて、シェル上に (env) という「仮想環境で動いてるよ」的なサインが出る

Screen Shot 2014-12-20 at 2.55.26 PM.png

Flaskチュートリアル

  • まずはHello, world
  • カンタンなDBアクセス
  • www.ikyu.com のコンテンツをスクレイピングして表示するアプリ

といった感じでやってみる。

Hello, world Flask

まずはFlaskのインストール

(env)$ pip install flask
........ # ログがゲロゲロ出て、flaskがインストールされる
(env)$ touch hello.py
(env)$ vim hello.py

hello.pyには下記のように書く

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "hello world"

if __name__ == '__main__':
    app.run()
  • flaskをインポート
  • appインスタンス作る
  • route書く
  • このモジュールがmainで実行された場合の if __name__ == '__main__': にはappインスタンスをローカルサーバ(デフォルトは localhost:5000)で実行する

という感じです。

書いたら、実行して、ブラウザで http://localhost:5000/ を開いて、hello worldが表示されれば :ok: です

(env)$ python hello.py

* Running on http://127.0.0.1:5000/
127.0.0.1 - - [20/Dec/2014 14:29:44] "GET / HTTP/1.1" 200 -

Tutorial

Flaskチュートリアルをひたすらやるだけ。

ひと通り書いたら、動かしてみてentriesにデータができてるトコを確認。

(env)$ python flaskr.py

* Running on http://127.0.0.1:5000/
* Restarting with reloader
127.0.0.1 - - [20/Dec/2014 16:14:19] "GET /logout HTTP/1.1" 302 -
127.0.0.1 - - [20/Dec/2014 16:14:19] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [20/Dec/2014 16:14:20] "GET /login HTTP/1.1" 200 -
127.0.0.1 - - [20/Dec/2014 16:14:31] "POST /login HTTP/1.1" 302 -
127.0.0.1 - - [20/Dec/2014 16:14:31] "GET / HTTP/1.1" 200 -

Screen Shot 2014-12-20 at 4.14.21 PM.png

起動出来てます

Screen Shot 2014-12-20 at 4.14.37 PM.png

Webからデータの登録も出来ていて

hoge.jpg

SQLite側からも確認できています。

ここまでで夕方16:20..あと1hちょい。時間がねー!!

BeautifulSoup

install

pipでインストール

(env)$ pip install beautifulsoup

(トレーニング) 一休.comのタグをいくつかとってFlaskアプリで表示する

def show_ikyu():
    url = 'http://www.ikyu.com/'
    html = urllib.urlopen(url).read()
    soup = BeautifulSoup(html)
    return "title: " + soup.find('h1').string

美女をスクレイピングする

いつぞやの開発合宿でNode.jsでチャレンジしたときと同じく、美女暦から美女をスクレイピングしようと試みるもここで無念のタイムアップ。美女を取得できず。。5時間くらいの作業時間で

までを実施。もうちょいやりたかった...


所感

  • 新しい言語楽しい
    • 書き方戸惑うとこあるけど、まぁなんとか読める
  • virtualenv便利
    • ちょっと試す程度なら、virtualenv便利ですね @shinyorke ありがとうございます
  • pip
    • 最近の言語では当たり前になりましたが、エコシステムが発達していてカンタンにモジュールが追加できるのは便利
  • Framework
    • 定番ものがよくわからないので、ちょっと戸惑った
    • やはり Django ..? 
      • 成果発表でプレゼンしたときに、このメモを見せたら「いや、Pyramidですね( ー`дー´)キリッ」と被せ気味にアドバイスいただいたので、Pyramidにもチャレンジしたいなと思いますw
  • Flask
    • SinatraライクでカンタンにWebアプリ作れる
    • 便利なんだが、Latest release(v0.10.1)が2013/06で止まってるのがちょっと気になる
  • BeautifulSoup
    • 時間足らなかったので、ノーコメント
  • スキル不足と準備不足
    • 環境くらいは作ってこようと思っていたが、結局来てから作った
    • 時間かかりすぎ..orz
  • 次回も参加したい
    • ほぼ月イチで定期開催らしいので、次回も参加して続きをやろうと思います
    • 最後に全員成果を発表するのはプレッシャーにもなるので、いい感じ
    • 思ったより、カジュアルな雰囲気で、Pythonガリガリ書いてるエンジニアから自分のようなPythonビギナーまで、気軽に楽しめる感じでオススメです

参考

環境構築

Webフレームワーク

BeautifulSoup