2015-07-19 2 views
0

Я пытаюсь сделать Python Wrapper для API. Я смог создать скрипты, которые работают нормально, но не используют классы. Я хочу сделать реальную оболочку этого API, используя классы. Я новичок в OOP в Python.Создание оболочки python для API с использованием классов

Последовала моя попытка, но я застрял в том, как преобразовать ее в тип OO.

import urllib2 
from urllib import urlencode 
import json 

class apiclient: 
    def __init__(self, 
       request_url, 
       hmh_api_key, 
       client_id, 
       grant_type="password", 
       username="username", 
       password="password"): 

     values = { 
       "client_id": client_id, 
       "grant_type": grant_type, 
       "username": username, 
       "password": password 
      } 

     data = urlencode(values) 

     req = urllib2.Request(request_url, data) 
     req.add_header("Api-Key", api_key) 
     response = urllib2.urlopen(req) 

     response_header = response.info().dict 
     response_body = response.read() 
     json_acceptable_string = response_body.replace("'", "\"") 
     response_body_dict = json.loads(json_acceptable_string) 

     return response_body_dict ## this is the response 

if __name__ == "__main__": 

    API_KEY = "75b5cc58a5cdc0a583f91301cefedf0c" 
    CLIENT_ID = "ef5f7a03-58e8-48d7-a38a-abbd2696bdb6.hmhco.com" 
    REQUEST_URL = "http://some.url" 

    client = apiclient(request_url=REQUEST_URL, 
         api_key=API_KEY, 
         client_id=CLIENT_ID) 

    print client 

Без классов, я получаю ответ JSON как response_body_dict, но с классами я TypeError: __init__() should return None. Как мне приступить к разработке моей программы. Я показал только часть всей программы, существует много похожих сценариев, которые отправляют запросы на URL-адреса и получают ответы JSON.

Спасибо!

ответ

0

Вы не должны возвращать что-то от __init__ функции.

EDIT:

Если вам нужно это значение, вы должны использовать response_body_dict в качестве члена класса и получить его от другого метода:

import urllib2 
from urllib import urlencode 
import json 

class apiclient: 
    def __init__(self, 
       request_url, 
       api_key, 
       client_id, 
       grant_type="password", 
       username="username", 
       password="password"): 

     values = { 
       "client_id": client_id, 
       "grant_type": grant_type, 
       "username": username, 
       "password": password 
      } 

     data = urlencode(values) 

     req = urllib2.Request(request_url, data) 
     req.add_header("Api-Key", api_key) 
     response = urllib2.urlopen(req) 

     response_header = response.info().dict 
     response_body = response.read() 
     json_acceptable_string = response_body.replace("'", "\"") 
     self.response_body_dict = json.loads(json_acceptable_string) 

    def get_response_body(self): 
     return self.response_body_dict 

if __name__ == "__main__": 

    API_KEY = "75b5cc58a5cdc0a583f91301cefedf0c" 
    CLIENT_ID = "ef5f7a03-58e8-48d7-a38a-abbd2696bdb6.hmhco.com" 
    REQUEST_URL = "http://some.url" 

    client = apiclient(request_url=REQUEST_URL, 
         api_key=API_KEY, 
         client_id=CLIENT_ID) 
    response = client.get_response_body() 

    print client 
+0

Тогда как я должен переписать его так, что я могу для ввода любых ключей, которые я указал, и получить ответ JSON, поскольку он содержит другой ключ, который должен использоваться в других API-интерфейсах? –

+0

@AnimeshPandey, я отредактировал свой ответ на пакет для решения, которое вам нужно. –

+0

Тем временем я попробовал другое, где я на самом деле указывал каждый ключ как 'self.client_id' и т. Д. В' __init__'. и делать все остальные работы в отдельной функции. Наверное, это то же самое, что и вы? –

Смежные вопросы