2011-04-13 7 views
1

.txt 파일을 가져와 파일 내의 위치를 ​​찾고 Yahoo Placemaker를 사용하여 .txt 파일을 나타내는지도를 제작자에게 플로팅하는 Google AppEngine Project를 만들었습니다 .속성 lat는 내 대시 보드에 표시되는 부동 소수점이어야합니다.

BadValueError: Property lat must be a float

내 main.py는 다음과 같습니다 :

class Story(db.Model): 
    id = db.StringProperty() 
    loc_name = db.StringProperty() 
    title = db.StringProperty() 
    lat = db.FloatProperty() 
    long = db.FloatProperty() 
    link = db.StringProperty() 

class MyStories(webapp.RequestHandler): 
    def get(self): 
     temp = db.Query(Story) 
     temp = temp.count() 


     story_set = Story.all() 

     template_values = { 
      'storyTemp': story_set 
     } 

     path = os.path.join(os.path.dirname(__file__), 'index.html') 
     self.response.out.write(template.render(path, template_values)) 

class place(webapp.RequestHandler): 
    def get(self): 
     path = '/Users/kimmasterson/storing/txtFiles' 

      try: 
      for infile in glob.glob(os.path.join(path, '*.txt')): 
        #print infile 
        f = open(infile, 'r') 
        data = f.read() 
        newfile = infile.replace('.txt', '') 
        newfile = newfile.replace('/Users/kimmasterson/storing/txtFiles/', '') 
        #print newfile 
        storyname = 'http://www.independent.ie/national-news/' + newfile 
        #print storyname 
        #print newfile 
        #logging.info(data) 
        p = placemaker('HSnG9pPV34EUBcexz.tDYuSrZ8Hnp.LowswI7TxreF8sXrdpVyVIKB4uPGXBYOA9VjjF1Ca42ipd_KhdJsKYjI5cXRo0eJM-') 
        print p.find_places(data) 
        for place in p.places: 
         splitted = place.name.split() 
         for word in splitted: 
          temp = db.Query(Story) 
          temp = temp.filter("link = ", storyname) 
          results = temp.fetch(limit=1) 
          if len(results) >0: 
           break 
          elif 'IE' in word: 
           print temp 
           print 'success' 
           story = Story(name=newfile, lat=place.centroid.latitude, long=place.centroid.longitude, link=storyname, loc_name = place.name, title = newfile).put() 
     except: 
      print 'error' 
      logging.info('BIG FAT ERROR') 

def main(): 
    application = webapp.WSGIApplication([('/', MyStories), ('/place', place)], 
             debug=True) 

    wsgiref.handlers.CGIHandler().run(application) 


if __name__ == '__main__': 
    main() 

내 크론 내 로컬 호스트에서의 실행하지만 난 시도하고 appspot에 업로드 할 때 오류가 발생하는 경우 이 프로젝트는 잘 작동 .yaml :

cron: 
- description: running place 

    url: /place 

    schedule: every day 10:00 

어떤 이유로 나는 장소를 추가하고 파일을 내 로컬 호스트의지도에 연결합니다. 두 곳의 동일한 코드가 어떻게 다른 곳에서 작동 할 수 있는지에 대한 아이디어가 있습니까?

답변

0

확실한 대답은 lat (이는 place.centroid.latitude에서 발생)은 부동 소수점입니다. 어떤 유형인지 알아 보려면 type(place.centroid.latitude)을 로깅 해보십시오. 내 생각에 문자열이라고 생각하면 구문 분석을 위해 float()을 호출해야합니다.

@Thomas가 지적한 것처럼 로컬 시스템의 파일을 참조하여 App Engine에 업로드 한 후에는 제대로 작동하지 않을 수 있습니다. 대신 정적 데이터를 앱의 루트 디렉토리 (또는 하위 디렉토리)에 넣고 상대 경로로 엽니 다.

path = os.path.join(os.path.dirname(__file__), 'path/to/your/file') 
+0

오류는 사라졌지 만 맵에는 마커가 나타나지 않습니다. 이 코드 줄을 main.py : path = os.path.join (os.path.dirname (__ file __), '/ Users/kimmasterson/저장/txtFiles')에 추가했습니다. 메인에 어딘가에 있습니다. 그것이 배치되어야하는 .py 즉 : 상단에? – jenniem001

+0

@ jenniem001 앱에서 하드 드라이브의 파일을 계속 참조하려고합니다. '/ Users/kimmasterson'은 프로덕션 서버에 존재하지 않습니다. app.yaml과 같은 디렉토리에 파일을 놓은 다음 위의 경로로 'txtFiles'를 사용하면됩니다. –

+0

path = os.path.join (os.path.dirname (__ file__), '/ storage/txtFiles') 오류 로그가없고 내 cron이 성공적으로 실행 중입니다. 그러나 나는 아직 어떤 표식도 가지고 있지 않다. 내가 뭔가 잘못하고 있는거야? 이것은 내 로그입니다 : "이 요청으로 인해 새 프로세스가 시작되어 응용 프로그램 코드가 처음으로로드되었습니다. 따라서이 요청은 일반적인 요청보다 더 오래 걸리고 CPU 사용량이 많을 수 있습니다 신청." 그러나 나는 기다렸으며 내지도에는 마커가 없습니다. – jenniem001

2
  1. 진짜로 명백한 : path = '/Users/kimmasterson/storing/txtFiles' - 난 분명 그 원격 서버에서 작동하지 않을 것 때문에, 정확하게하는 App Engine에 업로드하지 않는 바랍니다.

  2. place에 대한 세부 정보를 인쇄하는 경우 오류가 발생하기 직전에 무엇을해야합니까?

는 편집 :

당신이 뭘 하려는지 보면, 나는 당신이 실제로 텍스트 파일을 업로드 할 필요가 있다고 생각하지 않습니다. 당신은 독립적 인 웹 사이트에서 이야기의 장소를 얻으려고합니다, 그렇죠? 당신은 placemaker에 URL을 전달할 수 있습니다

p.find_places("http://www.independent.ie/national-news/patient-too-large-for-ambulance-2619414.html") 

야후 오히려 응용 프로그램에서 보내기보다, 직접 independent.ie에서 페이지를 얻을 것이다.

+0

내가 localhost를 보면 : 8080/장소 나는이 같은 물건을 얻을 : "[, <그 작업을 수행하는 가장 쉽고 강력한 방법이 같다 Placemaker 장소 : 'Churchtown, Cork, IE'>, appspot에 아무 것도 없다. 내 cron은 성공이라고 말하기 때문에 내가 로그를 클릭하면 그 오류가 발생합니다. – jenniem001

+0

내 .txt 파일을 appEngine에 저장하여 액세스 할 수 있습니까? – jenniem001

+0

@ jenniem001 :'app.yaml'에 정적 폴더를 설정하면 업로드 할 수 있다고 생각합니다. 파일 크기 제한이 무엇인지 모르겠습니다. 또는 URL 가져 오기 서비스를 사용하여 independent.ie 웹 사이트에서 직접 파일을 가져올 수도 있습니다. 또는 컴퓨터에서 파일을 처리하고 Appengine의 대량 데이터 업 로더로 피드하는 CSV 파일을 생성 할 수 있습니다. –

관련 문제