2016-08-16 5 views
0

실행하기 나는 Server() 클래스 아래 내에서이 개 기능 (recharge_list and sms_list)기능하지가 파이썬

import os 
import json 
import requests 
import cherrypy 
import ConfigParser 
from bs4 import BeautifulSoup 

class Server(): 

    @cherrypy.expose 
    def index(self): 

     return "Seems Like You're Lost :D" 


    @cherrypy.expose 
    def recharge_list(self,carrier, state): 
     details_array=[] 
     small_details_array=[] 
     price_cell_array=[] 
     lst = [] 
     url = "link{}/{}".format(carrier,state) 
     try: 
      if self.t_arr.get(url) is not None: 
       return json.dumps({'data': self.t_arr[url]}) 
     except AttributeError: 
      self.t_arr = {} 
     r = requests.get(url) 
     data = r.text 
     soup = BeautifulSoup(data,"html.parser") 
     table = soup.find('table',{'class':'table'}) 
     s="" 
     detailtext = table.findAll('div',{'class':'detailtext'}) 


     for det in detailtext: 
      details_array.append(det.text) 

     smalldetails = table.findAll('div',{'style':'padding-top:5px'}) 

     for smallDet in smalldetails: 
      small_details_array.append(smallDet.text); 


     price_cells = table.findAll('td', {'class': 'pricecell'}) 
     for price_cell in price_cells: 
      price_cell_array.append(price_cell.text) 

     for i in range(len(details_array)): 
      d_arr = {} 
      d_arr['detail']=details_array[i] 
      temp = small_details_array[i].split('\n') 
      d_arr['talktime'] = temp[1] 
      d_arr['keyword']=temp[3] 
      tempnew = price_cell_array[i].split('\n') 
      d_arr['price'] = tempnew[1] 
      d_arr['validity'] = tempnew[3] 
      # global list 
      lst.append(d_arr) 
     self.t_arr[url] = lst 
     return json.dumps({'data': self.t_arr[url]}) 

    @cherrypy.expose 
    def sms_list(self,carrier, state): 
     details_array=[] 
     price_cell_array=[] 
     lst = [] 
     url = "link/{}/{}".format(carrier,state) 
     try: 
      if self.t_arr.get(url) is not None: 
       return json.dumps({'data': self.t_arr[url]}) 
     except AttributeError: 
      self.t_arr = {} 
     r = requests.get(url) 
     data = r.text 
     soup = BeautifulSoup(data,"html.parser") 
     table = soup.find('div',{'id':'SMS'}) 
     table2 = table.find('table',{'class':'table'}) 
     print(table2) 
     s="" 
     detailtext = table2.findAll('div',{'class':'detailtext'}) 


     for det in detailtext: 
      details_array.append(det.text) 

     smalldetails = table2.findAll('div',{'style':'padding-top:5px'}) 


     price_cells = table.findAll('td', {'class': 'pricecell'}) 
     for price_cell in price_cells: 
      price_cell_array.append(price_cell.text) 

     for i in range(len(details_array)): 
      d_arr = {} 
      d_arr['detail']=details_array[i] 
      tempnew = price_cell_array[i].split('\n') 
      d_arr['price'] = tempnew[1] 
      d_arr['validity'] = tempnew[3] 
      # global list 
      lst.append(d_arr) 
     self.t_arr[url] = lst 
     return json.dumps({'data': self.t_arr[url]}) 

if __name__ == '__main__': 
    ''' Setting up the Server with Specified Configuration''' 

    cherrypy.config.update({'server.socket_host': '0.0.0.0',}) 
    cherrypy.config.update({'server.socket_port': int(os.environ.get('PORT', '5000')),}) 

cherrypy.quickstart(Server()) 

나는 그것이 작동 recharge_list 내 서버를 실행할 때 문제가있다,하지만 내가 터미널에서 내 서버를 종료해야 서버를 다시 시작하여 sms_list 기능을 실행하십시오.

Server 클래스로 생성 된 객체는 처음 호출 된 함수 만 실행할 수 있습니다.

코드를 편집하여 서버를 종료하지 않고 함수를 실행할 수 있도록해야합니까?

+0

"* recharge_list' *를 사용하여 서버를 실행한다는 것은 무엇을 의미합니까? 정확히 어떤 행동을 취하고 어떤 결과를 관찰합니까? –

+0

http : // localhost : 5000/recharge_list /가 기본 url이고 airtel/karnataka가 인수 인 firefox http : // localhost : 5000/recharge_list/airtel/karnataka에서 URL을 호출합니다. – penta

+0

그런 다음 어떻게됩니까? 그 결과가 기대 되는가? 오류 메시지가 생성됩니까? http : // localhost : 5000/sms_list next를 방문하십니까? 서버를 종료해야한다고 생각하는 이유는 무엇입니까? –

답변

1

제 생각에 Server 클래스로 생성 된 객체는 첫 번째로 호출 된 함수 만 실행할 수 있습니다.

그렇지 않습니다. HTTP 요청이 제공 될 때마다 웹 서버는 해당 요청의 URL과 연관된 기능을 호출합니다.

코드를 편집하여 서버를 종료하지 않고 기능을 실행할 수 있도록해야합니까? sms_list에서

(및 recharge_list에 있지)는 t_sms_arr으로 t_arr의 모든 인스턴스를 대체.

+0

t_url 변수가 없습니다 – penta

+0

죄송합니다. 제 입력상의 오류였습니다. 나는'self.t_arr'을 의미했다. –