2014年7月3日木曜日

開発環境

Head First Python (Paul Barry(著)、 O'Reilly Media )のChapter 8(Mobile app Development: Small devices)、EXERCISE(p.285)を解いてみる。

EXERCISE(p.285)

コード(BBEdit)

サーバー

cgi-bin/athletelist.py

#!/usr/bin/env python3
#-*- coding: utf-8

class AthleteList(list):
    def __init__(self, name, dob=None, times=[]):
        list.__init__([])
        self.name = name
        self.dob = dob
        self.extend(times)

    @staticmethod
    def sanitize(time_string):
        if '-' in time_string:
            splitter = '-'
        elif ':' in time_string:
            splitter = ':'
        else:
            return(time_string)
        mins, secs = time_string.split(splitter)
        return mins + '.' + secs

    @property
    def top3(self):
        return sorted(set([self.sanitize(t) for t in self]))[0:3]

    @property
    def to_dict(self):
        return {'name':self.name, 'DOB':self.dob, 'top3':self.top3}

クライアント(Android, sl4a)

sample285.py

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import android
import json
import time

from urllib import urlencode
from urllib2 import urlopen

hello_msg = "Welcome to Coach Kelly's Timing App"
list_title = 'Here is your list of athletes:'
quit_msg = "Quitting Coach Kelly's App."
web_server = 'http://127.0.0.1:8080'
get_names_cgi = '/cgi-bin/generate_names.py'
get_data_cgi = '/cgi-bin/generate_data.py'

def send_to_server(url, post_data=None):
    if post_data:
        page = urlopen(url, urlencode(post_data))
    else:
        page = urlopen(url)
    return page.read().decode('utf8')

def status_update(msg, how_long=2):
    app.makeToast(msg)
    time.sleep(how_long)

athlete_names = sorted(json.loads(send_to_server(web_server + get_names_cgi)))

app = android.Android()
status_update(hello_msg)
app.dialogCreateAlert(list_title)
app.dialogSetSingleChoiceItems(athlete_names)
app.dialogSetPositiveButtonText('Select')
app.dialogSetNegativeButtonText('Quit')
app.dialogShow()
resp = app.dialogGetResponse().result

if resp['which'] == 'positive':
    i = app.dialogGetSelectedItems().result[0]
    name = athlete_names[i]
    athlete = json.loads(send_to_server(
        web_server + get_data_cgi, {'witch_athlete': name}))
    app.dialogCreateAlert(name)
    app.dialogSetItems(athlete.to_dict['top3'])
    app.dialogSetPositiveButtonText('Close')
    app.dialogShow()
    
status_update(quit_msg)

アクセスを許可してるつもりだけど、上手くいかない。どこか設定上手くいってないのかなぁ。

0 コメント:

コメントを投稿