Перепрыгнеть в содержание


- - - - -

PHP соединение с BETFAIR API (помогите пжаласта)


4 ответов в эту тему

#1 OFFLINE   newBet

    Новичок


  • Участник
  • Пип
  • 12 сообщения
0

Добавлено 17 September 2015 - 16:32

Перечитал пол справки (в переводе google) на Betfair.
Вытащил sessionToken, создал Application Key
Скачал пример кодов на PHP https://github.com/b...tree/master/php

От только ни как не получается вообще получить даже список событий.

Сначала в коды подставлял свой sessionToken и Application Key, потом вычитал в блоге, что sessionToken меняется, а вот Application Key всегда один и тот же (что логично) и тогда пытался подключиться таким кодом:

<?php

ob_start();
$sessionToken = getACookie();
ob_end_clean();

//echo $sessionToken;

$APP_KEY = 'мой код';
$SESSION_TOKEN = $sessionToken; //тут я получаю из куков текущий sessionToken

function getACookie(){

$loginEndpoint= "https://identitysso.betfair.com/api/login";

$cookie = "";

$username = "Мой логин";
$password = "Мой пароль";


$login = "true";
$redirectmethod = "POST";
$product = "home.betfair.int";
$url = "https://www.betfair.com/";

$fields = array
(
'username' => urlencode($username),
'password' => urlencode($password),
'login' => urlencode($login),
'redirectmethod' => urlencode($redirectmethod),
'product' => urlencode($product),
'url' => urlencode($url)
);

//open connection
$ch = curl_init($loginEndpoint);
//url-ify the data for the POST
$counter = 0;
$fields_string = "&";

foreach($fields as $key=>$value)
{
if ($counter > 0)
{
$fields_string .= '&';
}
$fields_string .= $key.'='.$value;
$counter++;
}

rtrim($fields_string,'&');

curl_setopt($ch, CURLOPT_URL, $loginEndpoint);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch, CURLOPT_HEADER, true); // DO RETURN HTTP HEADERS
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // DO RETURN THE CONTENTS OF THE CALL

//execute post

$result = curl_exec($ch);


echo $result;

if($result == false)
{
echo 'Curl error: ' . curl_error($ch);
}

else
{
$temp = explode(";", $result);
$result = $temp[0];

$end = strlen($result);
$start = strpos($result, 'ssoid=');
$start = $start + 6;

$cookie = substr($result, $start, $end);

}
curl_close($ch);

return $cookie;
}


function sportsApingRequest($appKey, $sessionToken, $operation, $params)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://beta-api.betfair.com/rest/v1/$operation/");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'X-Application: ' . $appKey,
'X-Authentication: ' . $sessionToken,
'Accept: application/json',
'Content-Type: application/json'
));

curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

$response = json_decode(curl_exec($ch));

$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($http_status == 200) {
return $response;
} else {
echo 'Call to api-ng failed: ' . "\n";
echo 'Response: ' . json_encode($response);
exit(-1);
}
}

function getAllEventTypes($appKey, $sessionToken)
{

$jsonResponse = sportsApingRequest($appKey, $sessionToken, 'listEventTypes', '{"filter":{}}');

return $jsonResponse[0]->result;
}

function extractHorseRacingEventTypeId($allEventTypes)
{
foreach ($allEventTypes as $eventType) {
if ($eventType->eventType->name == 'Horse Racing') {
return $eventType->eventType->id;
}
}
}


echo getAllEventTypes($APP_KEY, $SESSION_TOKEN);

?>

Результат: Call to api-ng failed: Response: null



Может я чего не так понял? Наведите на путь истинный, пжаласта :)
P.S.: в основном хочу мониторить коэффициенты, до ставок на автомате пока думается рановато...

#2 OFFLINE   triggers

    Триггер Мастер


  • Участник II
  • ПипПипПипПип
  • 989 сообщения
184

Добавлено 17 September 2015 - 21:01

А чего это у тебя https://beta-api.bet.../v1/$operation/ ?
Вот тут например адрес https://api.betfair....ing/json-rpc/v1

#3 OFFLINE   denvb

    Специалист


  • Участник II
  • ПипПипПип
  • 382 сообщения
90

Добавлено 18 September 2015 - 07:59

СообщенияnewBet, on 17 September 2015 - 16:32, сказал:

curl_setopt($ch, CURLOPT_URL, "https://beta-api.betfair.com/rest/v1/$operation/");

Может я чего не так понял? Наведите на путь истинный, пжаласта :)

как минимум, неправильный endpoint, времена beta-api давно прошли. Для rest запроса (к рынкам) надо так:
https://api.betfair.com/exchange/betting/rest/v1.0/$operation/


#4 OFFLINE   newBet

    Новичок


  • Участник
  • Пип
  • 12 сообщения
0

Добавлено 18 September 2015 - 11:25

Попробовал этот вариант:
https://api.betfair....1.0/$operation/
ответ тот же: Call to api-ng failed: Response: null

И исходники от сюда:
https://github.com/b...php/jsonrpc.php
Я изначально взял!

Я там подменяю переменные:
$APP_KEY = 'Мой ключ';
$SESSION_TOKEN = 'мое значение на Betfair';

Так как механиз до конца так и не понял, но понимаю так, что $SESSION_TOKEN может меняться, поэтому пробовал и через куки, как описано в коде выше брать $SESSION_TOKEN.
Но появляется ошибка
1. Get all Event Types....
Notice: Trying to get property of non-object in on line 49
Т.е. ругается на строку return $jsonResponse[0]->result; в коде ниже:

function getAllEventTypes($appKey, $sessionToken)
{
$jsonResponse = sportsApingRequest($appKey, $sessionToken, 'listEventTypes', '{"filter":{}}');
return $jsonResponse[0]->result;
}


Я реально в ауте, не могу понять, почему тестовые примеры не работают, аааааааа. Непонятки одни :(

#5 OFFLINE   newBet

    Новичок


  • Участник
  • Пип
  • 12 сообщения
0

Добавлено 18 September 2015 - 14:12

А может быть, коды примеров, представленные здесь: https://github.com/b...tree/master/php
просто устарели (все таки 29 июля 2013 года) были опубликованы.

Может быть эти коды не только у меня не работают?