python3.4 and mysql-connector install on MacOS X mavericks

python.orgの公式サイトからpython3.4 インストーラパッケージをダウンロード、インストール。
python3からmysql-connectorを使ってmysqlデータベースに接続したかったので、mysql-connectorのインストーラじゃなくて公式サイトからSelect platformでPlatform independentを選択し、ダウンロード、解凍。
cd mysql-connector-python-1.1.7
sudo python3 setup.py install
でインストール完了。

hogehoge% python3
Python 3.4.0 (v3.4.0:04f714765c13, Mar 15 2014, 23:02:41)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import mysql.connector
>>> exit()
importでエラーでなければインストール完了。

ShiftJIS エンコーディングのCSVファイルをnode.jsで読み込みしたい

 やりたいことはNode.jsと連携させるつもりのMongoDBにShiftJISエンコーディングのCSVファイルのデータを突っ込むこと。
MongoDBはファイルのタイプに関するオプション JSONとかCSVとか は存在するがencoding指定はないのでおそらくutf-8前提と思われる。
Node.jsからエンコーディング指定してファイルを読み込み、MongoDBのデータベースに書き込む設計とする。
node-csv-parserで郵便番号処理というページがヒット。
郵便番号辞書はShift_JISで公開されているので、ファイルエンコーディングは同じ。

npm install csv
npm install iconv

google calendarから日本の祝日のリストを取得する

前回の投稿でholidayというクラスを定義したコードをポストしたが、こちらはタプルのリストで書き直してみた。

# coding: utf-8
import datetime
import httplib2
import urllib
from xml.dom import minidom
from xml.dom.minidom import parseString
     
def get_japan_holiday(start,days,rg):
    """
    start :いつから dateオブジェクトで渡す
    days:調べたい期間を 日数で渡す
    rg:listで返ってくる祝日の要素数 
        大きくするとgoogleがエラーを返すのか? 未確認
    """
    end = start + datetime.timedelta(days)
    host = "http://www.google.com/calendar/feeds/"
    user = "ja.japanese%23holiday@group.v.calendar.google.com"
    param = "/public/full"
    val = {"start-min" : start.strftime("%Y-%m-%d"),
    "start-max" : end.strftime("%Y-%m-%d"),
    "max-results" : str(rg)}
    http = httplib2.Http()
    url = "%s%s%s?%s" % (host, user, param, urllib.urlencode(val))
    response,content = http.request(url) #返値には responseが必要
    xdoc = minidom.parseString(content)
    elements = xdoc.getElementsByTagName("entry")
    holidays = []
    for element in elements:
        day = holiday_name = ''
        for child in element.childNodes:
            if child.tagName == 'gd:when':
                day = child.getAttribute('startTime')
                d = day.split('-')
                date = datetime.date(int(d[0]),int(d[1]),int(d[2]))
            if child.tagName == "title":
                holiday_name = child.firstChild.data

        holidays.append((date,holiday_name))
        
    sorted_holidays = sorted(holidays,
            key=lambda holiday:(holiday[0].year,holiday[0].month,holiday[0].day))
 
    return sorted_holidays

if __name__=="__main__":
    now = datetime.datetime(2013,1,1)
    for holiday in get_japan_holiday(now,365*2,100):
        print holiday[0].isoformat() + ' ' + holiday[1]

google calendar から 祝日のリストを取得する

今作成中のwebアプリで、祝日のリストが必要。厳密にやると、春分の日と秋分の日が、年に依って変化してしまうダメダメな日本の法律。仕方がないので、google様にお世話になる。以下はgoogle calendarから祝日の日付と名前をlist形式にして返すpythonのコード。

# coding: utf-8
import datetime
import httplib2
import urllib
from xml.dom import minidom
#from xml.dom.minidom import parseString

class Holiday:
    def __init__(self,date_string,name):
        self.date_string = date_string
        self.name = name
        d = date_string.split('-')
        self.date = datetime.date(int(d[0]),int(d[1]),int(d[2]))
    def __repr__(self):
        return self.date_string + ' ' + self.name

def get_japan_holiday(start,days,range):
    """
    start :いつから datetimeオブジェクトで渡す
    days:調べたい期間を 日数で渡す
    range:listで返ってくる祝日の要素数 
   大きくするとgoogleがエラーを返すのか? 未確認
    """
    end = start + datetime.timedelta(days)
    host = "http://www.google.com/calendar/feeds/"
    user = "ja.japanese%23holiday@group.v.calendar.google.com"
    param = "/public/full"
    val = {"start-min" : start.strftime("%Y-%m-%d"),
    "start-max" : end.strftime("%Y-%m-%d"),
    "max-results" : str(range)}
    http = httplib2.Http()
    url = "%s%s%s?%s" % (host, user, param, urllib.urlencode(val))
    response,content = http.request(url)
    #print parseString(content).toprettyxml(encoding="utf-8")
    xdoc = minidom.parseString(content)
    elements = xdoc.getElementsByTagName("entry")
    holidays = []
    for element in elements:
        day = holiday_name = ''
        for child in element.childNodes:
            if child.tagName == 'gd:when':
                day = child.getAttribute('startTime')
            if child.tagName == "title":
                holiday_name = child.firstChild.data
        holidays.append(Holiday(day,holiday_name))
        
    sorted_holidays = sorted(holidays,key=lambda holiday:(holiday.date.year,holiday.date.month,holiday.date.day))

    return sorted_holidays

if __name__=="__main__":
    now = datetime.datetime(2013,1,1)
    print get_japan_holiday(now,365*2,100)

Python + Pyramid1.4 のチュートリアル

MacOS X 10.8.3上でテスト。python 2.7はインストールされているから、ターミナルで

$python
Python 2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

で確認。次にvirtualenv,vertualenvwrapperをインストール。
その後、pyramidという仮想環境を作り、

$ workon pyramid
$ easy_install pyramid

で仮想環境に入ってから、pyramid1.4がインストールされる。eclipseで編集予定なのでworkspaceディレクトリに入り、
Pyramidのframeworkを解説しているのOn Unixのコマンドをターミナルから実行する。
test.pyを実行するためには、easy_install nose WebTestもやっておく。
サーバーを起動させるにはreloadオプションをつけ、

$pserve development.ini --reload
$pcreate -s alchemy tutorial
$python setup.py test -q
$nosetests --cover-package=tutorial --cover-erase --with-coverage
$initialize_tutorial_db development.ini

eclipseのNew Project->PyDevProject Project名はTutorial
(projectのルートディレクトリ名と同じ名前にすれば階層構造維持して読み込まれる)

アプリケーションの実行はターミナルから

pserve development.ini --reload

EclipseでGAE with Djangoを使う

GAEのアプリケーションを作成するのにpythonのデバッガを使いたい。いろいろ調べてみた結果、Eclipse上でpythonのデバッガが使えるらしい。だが、Eclipse上でGAEのサンプルを走らせるのはweb上で見つけたが、Djangoのモデルも使用できるものはとうとう発見できなかったので、Eclipse-Python上でGAE、しかもDjangoのモデルをGoogleのdatabase APIを使ってアクセスできる環境を作ってみた自分のための備忘録。

GAEのアプリケーションを作成するのにpythonのデバッガを使いたい。いろいろ調べてみた結果、Eclipse上でpythonのデバッガが使えるらしい。だが、Eclipse上でGAEのサンプルを走らせるのはweb上で見つけたが、Djangoのモデルも使用できるものはとうとう発見できなかったので、Eclipse-Python上でGAE、しかもDjangoのモデルをGoogleのdatabase APIを使ってアクセスできる環境を作ってみた自分のための備忘録。
Eclipseは最新版をゲットし、Pydevをインストール。インストール先をHelp->software updates… ->Add sitesで入力。
MacOS X環境下でのテストのためにDjangoも正式サイトからダウンロードしインストールしておく。本来GAEにはDjangoが含まれているのだが、Djangoのチュートリアルなどが単独で動作できるようにしておく。
DjangoドキュメントVer1のチュートリアルに従い以下のコマンドを実行。プロジェクト名はofficeとする。