- Разяснения. Предложения и пример как да дърпам инфо от сайт
12
WT форуми -> Дъра-бъра -> Разяснения. Предложения и пример как да дърпам инфо от сайт
Създайте нова тема Напишете отговор 
Автор Съобщение
vinsbg
Редовен
Редовен

Регистриран на: 28/01/2009 2:21 pm

Support: 50
Bonus: 86
Мнения: 2553
Мнение 15/02/2017 9:06 pm      Отговорете с цитат


eLite написа:
...


А добавя новина 1
А иска да получи нещо за новината от Ц. За да се случи това:

А изпраща заявка към Б
Б приема искането на А
Б изпраща искането на А към Ц от свое име
Ц връща отговор на Б
Б връща отговор на А
А е щастлив, че има отговор от Ц без Ц да знае, че е за А Very Happy

Дано е малко по-ясно.

Малко се разточи темата, затова ще кажа как си представям нещата. В момента и трите сайта са онлайн. Това, което си мисля е от А да се изпраща curl заявка към Б ( ID-то ). Б ще получи параметъра и ще вземе данните от Ц с curl.

Това, което не ми е ясно е как да пратя тия заявки с curl... post/get в двете посоки..

едит:
Още по-лесен пример.

Аз (сайт А) искам да си купя цигари от магазина обаче нямам 18 години и продавача ( Сайт Ц ) няма да ми продаде. Затова давам парите на теб ( сайт Б ), защото ти има 18 години. Ти ми ги купуваш и ми ги носиш. Това е.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
eLite
Потребител
Потребител

Регистриран на: 07/04/2008 10:08 pm

Support: 59
Bonus: 97
Мнения: 965
Мнение 15/02/2017 9:25 pm      Отговорете с цитат


Ясно стана още от първия пример. Very Happy

Това което търсиш се нарича Proxy Class.

Имаш ли framework на B?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vinsbg
Редовен
Редовен

Регистриран на: 28/01/2009 2:21 pm

Support: 50
Bonus: 86
Мнения: 2553
Мнение 15/02/2017 9:29 pm      Отговорете с цитат


eLite написа:
Ясно стана още от първия пример. Very Happy

Това което търсиш се нарича Proxy Class.

Имаш ли framework на B?

Не .. няколко php файла, но нищо съществено, но трябва да има със сигурност нещо там, за да замаскирва Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
eLite
Потребител
Потребител

Регистриран на: 07/04/2008 10:08 pm

Support: 59
Bonus: 97
Мнения: 965
Мнение 15/02/2017 9:49 pm      Отговорете с цитат


Какво е Api-то на Сайт C - REST / SOAP?
Как изпращаш данните - POST / GET?
Какъв формат на данни получаваш - JSON / XML?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vinsbg
Редовен
Редовен

Регистриран на: 28/01/2009 2:21 pm

Support: 50
Bonus: 86
Мнения: 2553
Мнение 15/02/2017 10:00 pm      Отговорете с цитат


eLite написа:
Какво е Api-то на Сайт C - REST / SOAP?
Как изпращаш данните - POST / GET?
Какъв формат на данни получаваш - JSON / XML?


API -> REST
Мисля, че изпращам POST -> https://site.com/api/ID където ид-то е променлива за която искам инфото.
Данните, които получавам -> JSON
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
eLite
Потребител
Потребител

Регистриран на: 07/04/2008 10:08 pm

Support: 59
Bonus: 97
Мнения: 965
Мнение 15/02/2017 10:23 pm      Отговорете с цитат


Нещо такова:

PHP code:

<?php

$news_id = (int)$_GET['news_id'];
if ($news_id) {
NewsProxy::setApiKey("ApiKey");
$news = NewsProxy::GetNewsById($news_id);

var_dump(json_decode($news));
}


class NewsProxy {
private static $news_site_api_url = 'https://api.example.com/';
private static $news_site_api_method;
private static $news_site_api_key;

public static function SetApiKey($api_key) {
self::$news_site_api_key = $api_key;
}

public static function GetNewsById($id) {
self::$news_site_api_method = self::$news_site_api_url . 'news';
$parameters = ['id' => $id];
return self::MakeRequest($parameters);
}

public static function GetNewsByName($name) {
self::$news_site_api_method = self::$news_site_api_url . 'news';
$parameters = ['name' => $name];
return self::MakeRequest($parameters);
}

private static function MakeRequest($parameters = array()) {
if (!self::$news_site_api_key) {
throw new Exception("You must set the Api key.");
}

$parameters["api_key"] = self::$news_site_api_key;
$post_data = "";

foreach ($parameters as $key => $value) {
if (is_array($value)) {
foreach ($value as $sub_value) {
$post_data .= $key.'='.urlencode($sub_value).'&';
}
} else {
$post_data .= $key.'='.urlencode($value).'&';
}
}

$post_data = rtrim($post_data, '& ');

$request = curl_init(self::$news_site_api_method);
curl_setopt($request, CURLOPT_HEADER, 0);
curl_setopt($request, CURLOPT_ENCODING, "");
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_POSTFIELDS, $post_data);
//curl_setopt($request, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($request);
if(curl_error($request))
{
var_dump(curl_error($request));
}
curl_close($request);
return $response;
}
}


Правиш си файлче news-proxy.php в root-а на сайт B и от сайт A го извикваш с news_id GET параметър: https://www.news.com/news-proxy.php?news_id=1000

Ако не модифицираш response-а, то ще ти върне JSON-а от Api-то на сайт C.

Последната промяна е направена от eLite на 16/02/2017 11:19 am; мнението е било променяно общо 1 път
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vinsbg
Редовен
Редовен

Регистриран на: 28/01/2009 2:21 pm

Support: 50
Bonus: 86
Мнения: 2553
Мнение 16/02/2017 6:15 am      Отговорете с цитат


Благодарско! Днес ще го пробвам. Имам обаче 1-2 въпроса..

А ако искам да махна setApiKey("ApiKey") .. в смисъл има вариант и без api key да дърпам инфото.. просто подавам ID-то към сайта. Изтривам setApiKey("ApiKey") и проверките за API KEY-a по-долу, нали?


И второ:
"Правиш си файлче news-proxy.php в root-а на сайт B и от сайт A го извикваш с news_id GET параметър: https://www.news.com/news-proxy.php?news_id=1000 "
Това директно го слагам във файла на Сайт А и когато заредя страницата то ще си извика инфото? В смисъл без file_get_content или cURL ?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
eLite
Потребител
Потребител

Регистриран на: 07/04/2008 10:08 pm

Support: 59
Bonus: 97
Мнения: 965
Мнение 16/02/2017 11:18 am      Отговорете с цитат


Това е примерен клас, така че можеш да махнеш каквото ти трябва.

Относно втория ти въпрос - не.
Скриптът го качваш някъде в сайт B и от сайт A го извикваш с curl / file_get_contents, и parse-ваш JSON-а, който сайт C връща.

Edit: Можеш да използваш подобен клас на сайт A, който да извиква скрипта на B, който от своя страна ще направи заявка към C.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vinsbg
Редовен
Редовен

Регистриран на: 28/01/2009 2:21 pm

Support: 50
Bonus: 86
Мнения: 2553
Мнение 17/02/2017 2:03 pm      Отговорете с цитат


Благодаря на отзовалите се. Работата стана с curl Question
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 115
Bonus: 223
Мнения: 2939
Мнение 18/02/2017 7:33 am      Отговорете с цитат


vinsbg написа:
Благодаря на отзовалите се. Работата стана с curl Question


Че то нямаше друго с какво да стане така културно. Razz
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> Дъра-бъра Часовете са според зоната GMT + 2 Часа
12
Страница 2 от 2


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети