Pythonの学習の過程とか

学習の記録をつけておきましょう。Python3に少しずつ移行していきます。過去の記事のソースを2から3に、、、と考えましたが、新しいことをやったほうがいいですね。

Pythonの基礎 WebAPIを使ってみる YahooAPI(ショッピング、カテゴリランキング編)その1

YahooAPIを使ってみる

さて、文法ばかりやっていても全然楽しくはならないので、ちょっと無理はあrますが、Webアプリもどきを作ってみようと思います。

Webアプリもどきを作ってみる

「Webサービスのつくりかた」という本も参考にして勉強しているのですが、 その本には、詳しいhtmlやサーバの運用が書いてあるわけではなく、あくまでも「心構え」であったり、Webサービスの入り口へのヒントが書いてあります。 その中で、「最初はコマンドラインで。。。」という文章もありました。

私は大きな勘違いをしていました。 Webサービスというからには、一般に広く公開されていて、サーバもバッチリ運用しながら、ページ訪問をガンガン増やすことを勉強するのだと。 そうではありませんよね。 いや、たしかにそういう方面も必要なのですが、あくまでも最初は「何かしらのプログラム言語で面白いことができる」で良かったんですよね。 Pythonを使って、何か面白いことをやってみよう。 できれば他の人が見ても面白いものがいいけれど、最初は自分一人でも構わないですよね。

ということで色々調べてみました。

YahooAPIが便利そう

世の中には色んなAPIが公開されています。 本当に沢山あるのでびっくりします。どれも面白そうで、すぐに使ってみたいものもあります。

まだまだ勉強不足なので、それをどうすればいいのか見当もつかない部分もあるのですが、やる気にはなりました!

で、yahooAPIなのですが。 http://developer.yahoo.co.jp

気象情報から地図からニュースまで幅広く公開してくれています。

今回は、ショッピングのAPIを使ってみます。 http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/categoryranking.html

カテゴリランキングはYahoo!ショッピングの商品の売り上げランキング情報を取得することが可能なAPIです。デベロッパーは、カテゴリ別売り上げランキングをはじめ、男女別、年代別、週間および日間の売り上げランキング情報を取得することができます

ということらしいです。

参考にさせてい頂いたサイトはこちら http://bty.sakura.ne.jp/wp/archives/787

ソースの引用をさせてい頂きますが、どうやらコメントを受けてつけておられないようで、いずれ気づいて頂けたらと思います。

上記のリンクでは、Yahooショッピングのキーワードランキングを使ったPythonのサンプルが紹介されています。

私はそれを少しだけ変えて、カテゴリランキングを見てみようと思います。 ていうかほとんど同じです。 すみません、自分でちょっと変えてみたりして、動くことを確認してみたかったんです。。。。。

#coding:utf-8

import sys
import urllib
import json

def yapi_topics():
    url = 'http://shopping.yahooapis.jp/ShoppingWebService/V1/json/categoryRanking?'
    appid = '取得したappid'
    params = urllib.urlencode(
            {'appid': appid,
             'offset':1,
             'period':'weekly',
             'generation':30,
             'gender':'female',})

    #print url + params
    response = urllib.urlopen(url + params)
    return response.read()

def do_json(s):
    data = json.loads(s)
    #print(json.dumps(data, sort_keys=True, indent=4)); sys.exit()
    
    #jsonの階層の"Result"以下を辞書にする。keyは番号:その次の配列がvalueになっている
    item_list = data["ResultSet"]["0"]["Result"]

    #空のディクショナリを作る
    ranking = {}
    for  k, v in item_list.iteritems():
        try:
            rank = int(v["_attributes"]["rank"])
            vector = v["_attributes"]["vector"]
            name  = v["Name"]
            ranking[rank] = [vector, name]
        except:
            if k == "RankingInfo":
                StartDate = v["StartDate"]
                EndDate = v["EndDate"]
    
    print '-' * 40
    print u"集計開始日:", StartDate
    print u"集計終了日:", EndDate
    print '-' * 40
    ranking_keys = list(ranking.keys())
    ranking_keys.sort()
    for i in ranking_keys:
        print i, ranking[i][0], ranking [i][1]

if __name__ == '__main__':
    json_str = yapi_topics()
    do_json(json_str)

で、実行結果はこんな感じです。

#実行結果
----------------------------------------
集計開始日: 2013-11-30
集計終了日: 2013-12-07
----------------------------------------
1 new スキニー カラースキニーパンツ M742送料無料メ便対応ultra1208
2 new ☆セール☆裏起毛タイツ//レディース/カラータイツ/防寒
3 new ニットワンピース チュニック トップス送料無料N555ultra1208
4 new レギパン 裏起毛 レギンスパンツ M916送料無料メ便対応ultra1208
5 new フレアスカート ウエストゴム ミニスカート スカート セール ミディアム丈
6 new ウエッジ ムートン ショートブーツ 2013  新作
7 new 広告期間限定!iphone5 USBケーブル/Lightning USBケーブル iPhone5 ipad mini 最新ipad ipod iPodnano7 iPhone5s iPhone5c iPadAir iPad5対応 iOS7 に対応
8 new (ニットワンピ ニットワンピース) 長袖 ワンピ ドルマンスリーブニットワンピース (ビッグ ダーリン) 送料無料
9 new スキニー 裏起毛 レギンス パンツ裏地フリースで暖か【rb-047】ultra1208
10 new クリスマスケーキ2013 禁断のクリスマスケーキプレミアム チョコパリブレスト
11 new 【pick】【”1点のみのご注文に限り”メール便発送160円】変形Vネックミックスニットソー#2022【割引・値引イベント対象外商品】
12 new ドルマンスリーブ ワンピース Aライン ドルマン コクーン 2013 秋 冬 新作 無地 レディース 長袖 フレア Aライン セール
13 new 【pick】カラースキニー【chow chow chow】”レッドジッパーフラップポケット”#3332
14 new 今だけ送料無料♪あったかファー バックりぼんショートブーツ【74-63ys412】※ご予約カラーは、12月中旬よりの順次発送
15 new タータンチェックが人気♪バイカラーテールカットカットソー(単品購入に限りメール便発送)【cc-003】
16 new クリスタルガイザー ( 500mL*48本入 )/ クリスタルガイザー(Crystal Geyser) ( ミネラルウォーター 水 最安値挑戦中 激安 )【HAPPYSALE水・ソフトドリンク】
17 new クリスタルガイザー 500mL 48本入 クリスタルガイザー Crystal Geyser ミネラルウォーター 【HAPPYSALE】
18 new お歳暮 カニしゃぶ 鍋セット1.2kg(総重量1.4kg) 送料無料 ますよね
19 new カラースキニー デニンス パギンス レギンス パンツ(単品購入に限りメール便発送)【sh-426】
20 new ☆セール☆ニットカットソー//送料無料/レディース/Zootie(ズーティー)/カシミヤタッチ/ラウンドネック/秋冬/長袖

if name == 'main':とは??

if __name__ == '__main__':
    json_str = yapi_topics()
    do_json(json_str)

はい、最初の疑問はYahooAPIとは全然関係ないところから始まります。

色々なサンプルを見ているとよく出てきますよね。 メイン関数です、っていう意味かなという推測はできますが、ググってみましょ。調べてみましょう。

こんな記事がありました http://d.hatena.ne.jp/s-n-k/20080512/1210611374

スクリプトファイルとして実行されると name っていう変数? に 'main' っていう文字列が入る。

Python のスクリプトが import された時は name には import された名前が入る。

オライリーの本にもありました

● モジュールファイルがプログラムのトップレベルファイルとして機能する場合は、プログラム起動時に、 値として main が指定される。

● モジュールファイルがインポートされる場合は、値として、モジュール名(インポートのステートメン トに使用されたもの)が指定される。

要するに、このファイルはスクリプトとして実行するときでなければ動きません、ということですね。 このスクリプトには関数が二つありますが、いずれもこの条件をクリアしていなければ呼ばれないということになっています。 簡単ですね!

では、長くなりそうなので続きは次回!

初めてのPython 第3版

初めてのPython 第3版