За последние 24 часа нас посетили 16916 программистов и 1631 робот. Сейчас ищет 741 программист ...

Перевести python в php

Тема в разделе "PHP для новичков", создана пользователем BigHawkPro, 10 мар 2017.

Метки:
  1. BigHawkPro

    BigHawkPro Новичок

    С нами с:
    10 мар 2017
    Сообщения:
    8
    Симпатии:
    0
    Добрый день. Может есть специалисты в Питоне - уже неделю не могу подружиться с одним сервисом: они не знают php, а не врубаюсь в нюансы python. Суть такая: проходим POST-авторизацию логин/пароль, получаем в ответ ОК и куки. Дальше делаем GET-запрос по получению инфы из базы с парой куков. Делал с помощью curl - авторизация ОК, куки получаю, пишу в файл, делаю запрос, а в ответ: "methodStatus":"AccessDenied"..." Поддержка говорит, что дело в куках и присылает такой пример рабочего кода:
    Код (Text):
    1. # -*- coding: utf-8 -*-
    2. import requests
    3. import logging
    4. import sys
    5. import ujson
    6. class Logger(object, ):
    7. def __init__(self, level):
    8. self.levels = {'debug': logging.DEBUG,
    9. 'warning': logging.WARNING,
    10. 'info': logging.INFO,
    11. 'error': logging.ERROR}
    12. self.log_format = '[%(asctime)s] # %(levelname)-8s %(message)s'
    13. logging.basicConfig(format=self.log_format, level=self.levels[level] if level in self.levels else None)
    14. @staticmethod
    15. def format_msg(func_name, msg):
    16. return '[method: {}] {}'.format(func_name, str(msg))
    17. def debug(self, msg):
    18. logging.debug(msg=self.format_msg(sys._getframe(1).f_code.co_name, msg))
    19. def warning(self, msg):
    20. logging.warning(msg=self.format_msg(sys._getframe(1).f_code.co_name, msg))
    21. def error(self, msg):
    22. 38
    23. logging.error(msg=self.format_msg(sys._getframe(1).f_code.co_name, msg))
    24. def info(self, msg):
    25. logging.info(msg=self.format_msg(sys._getframe(1).f_code.co_name, msg))
    26. class SeldonApi(object):
    27. def __init__(self, user, password, log_level):
    28. self._user = user
    29. self._password = password
    30. self._cookies = None
    31. self._restApiAddres = u'- https://basis.myseldon.com/api/rest/'
    32. self._log = Logger(level=log_level)
    33. def _get_url_request(self, method):
    34. return self._restApiAddres + method # + paramsInString if params else u''
    35. @staticmethod
    36. def _get_params(**kwargs):
    37. params_in_string = '&'.join([i + '=' + str(kwargs[i]) for i in kwargs])
    38. return params_in_string
    39. @staticmethod
    40. def _post_params(**kwargs):
    41. return dict(kwargs)
    42. def _get_request(self, method, inline_data_string):
    43. if inline_data_string:
    44. url = '{}/?{}'.format(self._get_url_request(method), inline_data_string)
    45. else:
    46. url = self._get_url_request(method)
    47. request = requests.get(url=url, cookies=self._cookies)
    48. 39
    49. return request
    50. def _post_request(self, method, data):
    51. url = self._get_url_request(method)
    52. request = requests.post(url=url,
    53. data=data,
    54. cookies=self._cookies)
    55. return request
    56. def login(self):
    57. result = self._post_request(method='login',
    58. data=self._post_params(UserName=self._user, Password=self._password))
    59. self._cookies = result.cookies
    60. self._log.debug('response code {}'.format(result.status_code))
    61. return result.content
    62. def check_balance(self):
    63. result = self._get_request(method='check_balance',
    64. inline_data_string=None)
    65. return result.content
    66. def get_company_card(self, ogrn):
    67. inline_params = self._get_params(ogrn=ogrn)
    68. result = self._get_request(method='get_company_card',
    69. inline_data_string=inline_params)
    70. self._log.debug('response code {}'.format(result.status_code))
    71. return result.content
    72. def find_company_by_inn(self, inn):
    73. inline_params = self._get_params(inn=inn)
    74. result = self._get_request(method='find_company',
    75. inline_data_string=inline_params)
    76. 40
    77. self._log.debug('response code {}'.format(result.status_code))
    78. return result.content
    79. api = SeldonApi(user='user',
    80. password='password',
    81. log_level='debug')
    82. api.login()
    83. finded = ujson.loads(api.find_company_by_inn('7701904600'))
    84. for company in finded['companies_list']:
    85. ogrn = company['basic']['ogrn']
    86. api._log.debug('Finded: {}'.format(ogrn))
    87. company_card = ujson.loads(api.get_company_card(ogrn=ogrn))
    88. api._log.debug('Card Status: {}'.format(company_card['status']['methodStatus']))
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @BigHawkPro у них есть описание API? Или только код дают?
     
  3. BigHawkPro

    BigHawkPro Новичок

    С нами с:
    10 мар 2017
    Сообщения:
    8
    Симпатии:
    0
    В описании все стандартно:
    Название метода в соответствии с документацией, например, «find_company». Название не чувствительно к регистру.
     Список параметров, например, «?Name=имя&regionCode=77».
    o Список параметров отделяется от названия метода с помощью знака «?».
    o Наименования параметров должны соответствовать указанным в описании соответствующего метода (без учета регистра).
    o Значения параметров отделяются знаком «=».
     Пары параметр-значение соединяются с помощью знака «&»
     Для авторизации используется метод POST, для вызова остальных методов GET.
     При авторизации сервис возвращает куки, при дальнейших вызовах в заголовках необходимо указывать полученные UserConnect, .NAUTH.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Это ты делаешь?

    Вот это уже странно, так как cookie обычно они сами и присылают и их отправляют обратно без изменений

    Можешь у них попросить http запросы с заголовками в качестве примера, может по ним тебе будет проще
     
  5. BigHawkPro

    BigHawkPro Новичок

    С нами с:
    10 мар 2017
    Сообщения:
    8
    Симпатии:
    0
    Да если бы - я б уже все сделал. Потому и ищу Питоновцев - чтобы помогли разгадать сею загадку.
    --- Добавлено ---
    Вот, только что получил ответ (3 дня писали))):
    Надо передавать авторизационные куки (2 обязательных параметра) отдельным заголовком в запросе GET, на С примерно так

    GET

    .../api/rest/get_event_list?listNo=2&shift=0

    HTTP/1.1
    Host: base.mysite.com
    Cookie:
    .NAUTH = 082C1523ACBED05A...
    UserConnect = c6490665-53da-48...)
    Connection: Keep-Alive

    Я отправляю им так и ни чего:
    curl_setopt ($ch, CURLOPT_COOKIE, "UserConnect=63f8121a-...; .NAUTH=E52E535120D420...");
    --- Добавлено ---
    И так тоже пробовал:
    curl_setopt ($ch, CURLOPT_COOKIEJAR, 'coockie.txt');
    curl_setopt ($ch, CURLOPT_COOKIEFILE, 'coockie.txt');
     
  6. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.106
    Симпатии:
    1.243
    Адрес:
    там-сям
    Автор, ты цитируя код ещё и отступы сломал. Без них питон не питон.

    Не торопись и не косячь, наверняка всё дело в простой невнимательности. Не надо усложнять.
     
    Fell-x27 нравится это.
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    а я всё читаю и читаю и ничего понять не могу, забыл про отступы в питоне
     
  9. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    @BigHawkPro,
    верни отступы в питоне, скинь ссылку на их api/сайт/или_что_там_у_них_есть и покаж свой код на php
     
  10. BigHawkPro

    BigHawkPro Новичок

    С нами с:
    10 мар 2017
    Сообщения:
    8
    Симпатии:
    0
    Я их не удалял - они здесь при вставке ушли.
    Мой код такой:
    PHP:
    1. function Request_Seldon ($inn) {
    2.   $url_construct = ".../api/rest/find_company?inn=".$inn;
    3.   $ch = curl_init();
    4.   curl_setopt ($ch, CURLOPT_URL, $url_construct);
    5.   curl_setopt ($ch, CURLOPT_HEADER, 1);
    6.   curl_setopt ($ch, CURLOPT_HTTPGET, 1);
    7.   curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 60);
    8.   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    9.   curl_setopt ($ch, CURLOPT_COOKIE, "UserConnect=63f8121a-74; .NAUTH=E52E53512FF7EF054A207E90514036EB183A4C57EAB629F7D889");
    10.   $result1 = curl_exec ($ch);
    11.   curl_close($ch);
    12.   return $result1;
    13. }
     
  11. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    @BigHawkPro, ну так расставь их, как они должны быть. Как по-твоему люди должны читать питон-код без пробелов? Угадывать?
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    потому что для кода есть тег code, ищи его по кнопке </> или + в редакторе сообщений форума
     
  13. BigHawkPro

    BigHawkPro Новичок

    С нами с:
    10 мар 2017
    Сообщения:
    8
    Симпатии:
    0
    Именно так я его и вставил... Языка Python там нет - выбрал именно CODE
     
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @BigHawkPro странно, так как в code все отступы у других работает, можешь файл в архив zip и прикрепить к сообщению
     
  15. BigHawkPro

    BigHawkPro Новичок

    С нами с:
    10 мар 2017
    Сообщения:
    8
    Симпатии:
    0
    Не увидел, где прикладывать фалы
    --- Добавлено ---
    видимо из-за того, что код копировался из pdf - там наверное отступы не копируются
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    отступы в python это важная часть программы, без них получается ерунда
     
  17. BigHawkPro

    BigHawkPro Новичок

    С нами с:
    10 мар 2017
    Сообщения:
    8
    Симпатии:
    0
    Был в отъезде.
    Мне прислали файл в pdf: пример на Питоне
    Может кто поможет - очень надо подружиться с сервисом.
     
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Я этот тред буду совать прям в лицо теперь каждому, кто при мне будет говорить о том, что фигурные скобки не нужны, отступы в качестве регуляторов вложенности кода рулят, минимализм вперде и тд.
     
    denis01 нравится это.
  19. BigHawkPro

    BigHawkPro Новичок

    С нами с:
    10 мар 2017
    Сообщения:
    8
    Симпатии:
    0
    С удовольствием, но есть только в таком виде - отступы не копируются, а то в Питоне оказывается важно. А сидеть и вручную переставлять отступы не совсем понимая кода - думаю не самая лучшая затея. Потому так - если кто-то вызовется помочь, кто разбирается в теме и нужно будет отступы проставить "руками", то конечно же я это сделаю... Но пока все не по существу, к сожалению - один коллега с форума попробовал помочь (за что ОГРОМНЫЙ респект), но тоже не справился, как и я.