Отправка POST-запроса на Piwik.php

Я пытаюсь отправить массовые запросы в API отслеживания Piwik (/piwik.php) и столкнулся с проблемой. Когда я отправляю запрос (из PHP-скрипта через ajax, curl и из fiddler2), я получаю следующее:

Debug enabled - Input parameters:<br/>array ( )
token_auth is authenticated!
Loading plugins: { Provider,Goals,UserCountry }
Current datetime: 2013-05-02 16:02:27
The request is invalid: empty request, or maybe tracking is disabled in the config.ini.php via record_statistics=0

Мой пост выглядит так:

{"requests":["%3Fidsite%3D1%26url%3Dhttp%3A%2F%2Fexample.org%26action_name%3DTest+bulk+log+Pageview%26rec%3D1"],"token_auth":"mytokenhere"}

Это пример прямо с их сайта. Я убедился, что для типа содержимого задано значение «Тип содержимого: application/json», а в моей конфигурации явно определено значение record_statistics = 1.

Согласно документации, все должно работать, но я все еще получаю пустой запрос. Скрипт import_logs.py тоже работает, поэтому я знаю, что общий массовый импорт не нарушен, но я не уверен, как заставить программу принимать мои данные. Кому-нибудь с ним повезло?

Спасибо!


person J_D    schedule 02.05.2013    source источник


Ответы (2)


Возможно, проблема с вашим запросом заключается в том, что ваши строки запроса закодированы в URL-адресе, но в этом нет необходимости, поскольку они являются частью тела POST.

Вместо этого ваш POST должен быть таким:

{"requests":["?idsite=1&url=http://example.org&action_name=Test+bulk+log+Pageview&rec=1"],"token_auth":"mytokenhere"}

См. пример в документации по API массового отслеживания: http://piwik.org/docs/tracking-api/reference/#toc-advanced-bulk-tracking-requests

person nullability    schedule 02.05.2013
comment
Благодаря возможности обнуления. Это было немного из-за того, что их документация была неправильной в отношении того, какой должна быть строка json, которая должна быть отправлена. Я смог установить Fiddler на свой сервер и прослушал его, когда запустил их скрипт импорта и выяснил, как на самом деле должен формироваться запрос. - person J_D; 03.05.2013

Разобрался, что не так. Их документация неверна в том, как нужно форматировать запрос. Во-первых, данные в кодировке URL были ненужными. Во-вторых, строка JSON должна выглядеть так:

{
"requests": [
    {
        "apiv": "1",
        "bots": "1",
        "idsite": "1",
        "download": "",
        "cdt": "",
        "dp": "",
        "url": "",
        "urlref": "",
        "cip": "",
        "ua": "",
        "_cvar": {
            "1": [
                "Not-Bot",
                "Mozilla/5.0+(Macintosh;+U;+Intel+Mac+OS+X+10_6_5;+en-US)+AppleWebKit/534.10+(KHTML,+like+Gecko)+Chrome/8.0.552.231+Safari/534.10"
            ]
        },
        "rec": "1"
    }
  ]
}

Не все эти фрагменты данных нужно отправлять, но это необходимый формат. После этого это просто очистка данных.

person J_D    schedule 03.05.2013
comment
Это не работает в последней версии Piwik 2. Следуйте руководству пользователя на developer.piwik. .org/api-reference/tracking-api#bulk-tracking работает. - person NickT; 23.05.2014
comment
Спасибо, NickT, это было около года назад, и я обсуждал это с их разработчиками, потому что с помощью Fiddler я мог видеть, что отправляли, и их документы не соответствовали тому, что на самом деле нужно было отправить. Рад видеть, что теперь все правильно выстраивается в их коде. - person J_D; 23.05.2014