世界的日曜WEBプログラマー日記 -18ページ目

世界的日曜WEBプログラマー日記

一年後に世界的なWEBサービスを運営するにはどうすればいいのか書いていく(予定)

簡易データーベース pickle( python )
お弁当のサイトを運営しているマイ食のエンジニアの者です。
外部からなんか弁当の情報をとってきたりするとき、URLアクセスが発生するためやけに取得に時間がかかる。
食べログなどのAPIを使って情報を取得した時も、一回一回APIを使っていてはすぐにキーの上限を越える。
DBに保存したいところだが、ちょいとメンドイし利用規約の問題などもあって…
と、そういう時にキャッシュ的(一時的に保存的な間隔で)にcPickleをつかって情報をセーブする。

使い方は以下のとおり
# dumpしたい時
somedata = [{'title':'お弁当のマイ食', 'url':'https://www.maishoku.com'},]
dump( 'anyname.is.okay.dmp', samedata )
# loadしたい時
data = load( 'anyname.is.okay.dmp' )

とする。ライブラリは以下のとおり。


import cPickle as p

def dump( filename, obj, binarymode = True ):
mode = 'wb' if binarymode else 'w'
f = open( filename, mode)
p.dump(obj, f, binarymode)
f.close()

def load( filename, binarymode = True ):
mode = 'rb' if binarymode else 'r'
f = open( filename, mode )
ret = p.load( f )
f.close()
return ret


Pickleはなんぞや?という人がいるかも知れない。
要するに、Pythonのデータ構造をそのまま何でも突っ込めてしまう物。
リストだろうが、クラスだろうがそのまま突っ込み保存してしまうことができる。
x = [ data1, data2, data3 ]
というデータがあっとして、後で別のpythonスクリプトでも使いたい時などあるとおもう。
とくにAPIアクセスなどで頑張って取得したデータなど、取得自体に結構時間がかかる時はどうしても一時保存したい。
データベースを使うのがお行儀がいいかもしれないけど、クラスごと保存できないし、いちいちMySQLに保存するのは…など、そういう時は
とりあえずはPickleに…的な利用方法ですね。

いつ保存するか…今でしょ!

と旬な話題を入れておきます。
お弁当の情報を取得する道は単純ではありませんな。

株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house
自動スクリプトSeleniumを使ったランキングの取得

Googleで特定の検索結果を取得したい場合、APIアクセスでできる。
しかしキー数には制限がかかっているためなかなか多くはできない。
Seleniumで取得する方法を考えてみる。

Pythonを用いて指定のURLを取ってくるには次のようにすればいい。

def main():
webdriver = get_driver( 'CHROME' )
webdriver.get('http://google.co.jp')

webdriver.find_element_by_name("q").clear()
webdriver.find_element_by_name("q").send_keys('Food delivery Maishoku')
webdriver.find_element_by_name("q").send_keys(Keys.RETURN)
path="//ol[id='rso']/li/div/h3/a"
while True:
time.sleep( 3 )
elems = webdriver.find_elements_by_xpath( path )
for elem in elems:
print elem, elem.get_attribute( 'href' )
webdriver.find_element_by_xpath("//a[id='pnnext']/span").click()


keywordはfood delivery maishokuとした。

株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house
Window7からUbuntu10.04にリモートデスクトップ接続できない問題。
XP以前なら問題ないらしい。

解決方法は、Ubuntu10.04のサーバーxrdpのバージョンが古いようで、
Ubuntuサーバー上で次をダウンロードする。 xrdp 0.5.x.x

後はdpkgコマンドを用いてインストール&再起動

$ dpkg -i xrdp*.deb
$ reboot

株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house