November 13, 2007

Python入門:urllibとurlencode

By kalebdf
「変換変換・・・」


GETリクエストの際に、URLとリクエストパラメータを結合する方法と、ダブルバイト文字(日本語とか)をリクエストに載るようにエンコードする方法。

たとえば、Googleで「ほげ」を検索すると、次のようなGETリクエストが生成されるとする。(ちょっとリクエストを省略)

http://www.google.co.jp/search?q=%E3%81%BB%E3%81%92&lr=lang_ja

'http://www.google.co.jp/search'に'?'を付けて、2つのリクエストパラメータを結合している。コレをPythonで作り出す。

import urllib
url = 'http://www.google.co.jp/search?'
keyword = u'ほげ'
lang = 'lang_ja'
encoding = 'utf-8'
query = {'q': keyword.encode(encodeing),
'lr': lang
} #辞書型オブジェクト
print url + urllib.urlencode(query)

◆ urlopen(url[,data[,proxies]])



urlにはそのまま、URLを渡す。

POSTリクエストであれば、dataに辞書型オブジェクトを渡す。

Proxyでのアクセスであれば、オプション引数proxiesにProxyについて辞書型オブジェクトを代入します。



◆ urlencode(query[,doseq])

queryには辞書型のオブジェクトが入り、'key=value'の形で渡される。

◆ 参考URL


November 12, 2007

GETとPOSTの基本理解

By addedentry






HTTPにおけるGETとPOSTの話。



◆ GETメソッド

URLの末尾に'?'で連結する、複数のリクエストパラメータ。複数ある場合は各パラメータと'&'で連結する。URLとリクエストパラメータを足し合わせて、ひとつのリクエストとするもの。

(例)
http://www.google.co.jp/search?q=%E3%81%BB%E3%81%92&lr=lang_ja
赤文字:URL
青文字:リクエストパラメータ
黒文字:接続文字('?','&')


◆ POSTメソッド

いわゆる"入力フォーム"を使ってサーバに情報を送信する。掲示板が一番いい例。
ブラウザのアドレス欄やリクエストパラメータに情報が入らないので、パスワードなどの秘匿性の高い情報を送信する場合には、POSTでなければセキュリティを保つことが出来ない。


◆ 参考URL

リクエストパラメータ



  generated by feedpath Rabbit

November 11, 2007

Python関連で気になったもの

By Extra Ketchup
「オライリーは好きな方」




◆ Python Workshop the Edge 2007

当日の発表資料や、ギークの書いたサンプルコードが公開されている。

◆ PythonでWeather Hacks@livedoor.com(その1,その2)

Web APIを扱う上で使いやすい例の物を、Pythonで導入してみるサンプル。

◆ はてブ



feedpath Rabbit Tags:   generated by feedpath Rabbit

Ruby入門:Web APIを使ってXMLを取得する










ほげおがそもそもRubyを勉強し始めたのは、最近流行の"Web API"や"マッシュアップ"によるウェブサイト構築を、Ruby on Railsのフレームワークを利用してやってみたい!というのが最初の動機。

地道にRubyの文法を覚え始めてきたので、そろそろウェブのリソースと連携してみようと思います。今回はそのよくあるサンプル例。











基本的にやりたいことは、今のレベルではこんなこと。


  1. ウェブサーバにリクエストを送って、何かしらの応答を取得する
  2. Web APIを叩いて、サーバから何かしらの応答を取得する
  3. サーバからXML形式で応答を取得し、そのデータを利用する


まずはサーバとお話ができなければならないので、基本的なコミュニケーションをとってみる。サンプルは下記のとおり。
環境によっては違ってくると思うけど、ほげおが利用しているロリポップでは下記のサンプルコードで動作します。





<サンプル>

#!/usr/local/bin/ruby -Ks

require 'rexml/document'
require 'open-uri'
require 'nkf'

print "Content-Type: text/html\r\n\r\n"

url = 'http://weather.livedoor.com'
path = '/forecast/webservice/rest/v1?city=70&day=tomorrow'
result = open(url + path)

doc = REXML::Document.new(result)

doc.elements.each ('lwws/') do |element|
puts NKF.nkf("-Ws", element.elements['title'].text)
end






このサンプルだけ見て「なるほど、わかったぞ!」と思ってくれる方にはこれ以上説明はいりませんが、詳しい説明が必要な人はこのまま下へ読み続けてください。












result = open(url)


open-uriのライブラリによって、openメソッドでURLを指定して、データを取得しています。
livedoor天気情報のWeb ApiによってXMLデータをリクエストする際のURLを、url変数とpath変数に分けて代入してあります。openメソッドに直接URLを指定してももちろんOKです。(ここでは可読性を考慮して横幅がスッキリするようにしているだけです。^^;)
これによってresult変数にXMLデータを入れることができます。



doc = REXML::Document.new(result)


rexml/documentのライブラリによって、XML形式のデータをXMLであると認識させた上で、doc変数に入れています。
これをしないと、XML形式に見えるただの文字データのままらしいですね。



doc.elements.each ('lwws/') do |element|
  puts NKF.nkf("-Ws", element.elements['title'].text)
end


rexml/documentのライブラリによってlwws階層のtitleエレメントを、nkfライブラリによってUTF-8に変換して、putsで出力しています。
「階層って何?」「エレメントて何?」となった人は、url変数に代入したURLをブラウザでリクエストしてみましょう。

http://weather.livedoor.com/forecast/webservice/rest/v1?city=70&day=tomorrow





そして最終的にlivedoor天気情報のサイトから、Web APIを叩いて取得したXMLデータから、任意の情報を取得/利用できるようになります。
サンプルで取得したデータは、下記のものになります。


神奈川県 横浜 - 明日の天気







ここまでなんとかこれたら、大きな階段を登ってきていると思います。



November 9, 2007

Ubuntuでapt-getをProxy経由で

By David Reeves



タイトルの通り、Ubuntuでapt-getをProxy経由で利用するときのメモ。



sudo vim /etc/apt/apt.conf

###新規作成
Acquire {
http::proxy "http://IPアドレス:ポート番号/"
}

Python入門:Proxy経由のウェブアクセス

By seanfraga
「どうやって行けばいいの?」


Pythonではまっているのが、ウェブリソースへのアクセス。
社内の開発環境で試したいのだが、ウェブへはProxy経由でなければならない社内事情により、常にProxyを意識しなければならない面倒さ加減。

別に、コンテンツフィルタリングもログ監視/解析もしてないのだから、PATでアクセスさせてもらいたいなぁ。

参考サイト:URLによる任意のリソースアクセス

% python
>>> proxies = proxies={'http': 'http://Proxyアドレス:ポート'}
>>> filehandle = urllib.urlopen('対象サイト', proxies=proxies)
>>> data = filehandle.read()
>>> print filehandle

November 8, 2007

Python入門:Proxy経由でHTTPリクエスト


「HTTPリクエストの作法を学びましょう」



Pythonでウェブコンテンツへアクセスするための第一歩。

% python
>>> import urllib
>>> url = 'http://www.google.com'
>>> filehandle = urllib.urlopen(url)
>>> data = filehandle.read()
>>> print data

Proxy経由でアクセスするための第一歩。

% python
>>> import urllib
>>> proxies = proxies={'http': 'http://192.168.0.1:8080'}
>>> url = 'http://www.google.com'

>>> filehandle = urllib.urlopen(url, proxies=proxies)
>>> data = filehandle.read()
>>> print data



November 1, 2007

Python入門:経過日数を計算するサンプルコード


「僕にはlambdaがよくわからないよっ」
「野球の素振りのように、ドンドン振っていこう」



たとえば、誕生日から10000日目が経過する日にちはいつだろうか。
そんな時には下のようにコードを書いてみよう。


from datetime import *
def func(n):
  return lambda d: d + timedelta(days=n)
f = func(10000)
n = date(1990, 1, 1)
print f(n)




10000とか1990,1,1とかはお好みで。
lambdaは無名関数を作るときのキーワード、
初めて見た人にとっては、ちょっとクセがありそう。

lambdaをもっと簡単に書くと下のように書ける。
自分なりに色々試して身につけたい。

x = lambda y: 10 * y + 1
print x(3)   #==>31