Разяснения. Предложения и пример как да дърпам инфо от сайт

vinsbg

Registered
Здравейте,

ситуацията е такава. Имам 3 сайта - Сайт А, Сайт B, Сайт C.

Сайт B тегли от тегли от Сайт C някаква информация от API. Това, което искам аз да направя е да тегля на Сайт A информация, която вече е на Сайт B..

Проста схема на това, което се опитвам да обясня.
6855.png



Site B постоянно си получава през API данни от Site C .. Сега трябва да направя Site A да дърпа от Site B .. сайт Б просто ги дърпа от Ц .. няма API няма нищо.

ноте: Site B няма да получава нищо от Site A :)
Давайте предложения как може да стане? Благодаря

edit: Сега като се замислих аз не искам да дърпам информация от междинния сайт. По-скоро ако е възможно от сайт 1 посредством сайт 2 и неговото апи да дърпам от сайт 3 директно на сайт 1...
 
uphero каза:
Плати си за достъп до апито.
сайт 1 и сайт 2 са мои... което ще рече, че апи-то и то.. просто искам всичко да се извършва на сайт 2..
В смисъл апи-то на сайт 2 аз го управялвам, какво да дърпа от сайт 3.. идеята е сайт 3 да не знае, че сайт 1 съществува :)

Със средния сайт се опитвам да го направя това.
 
Защо го правиш? Смисъл каква ти е идеята като цяло. Сайт B искаш да обработва цялата информация от C и теглото да се поеме от него ли?
 
dakata__92 каза:
.. Сайт B искаш да обработва цялата информация от C и теглото да се поеме от него ли?
Да.

Сайт А да "зад сцената" за Сайт Ц .. т.е. сайт Ц да не знае, че сайт А съществува :)
 
vinsbg каза:
dakata__92 каза:
.. Сайт B искаш да обработва цялата информация от C и теглото да се поеме от него ли?
Да.

Сайт А да "зад сцената" за Сайт Ц .. т.е. сайт Ц да не знае, че сайт А съществува :)

Добре де, каква ти е идеята? Смисъл дай ми прибер за какво искаш да го ползваш. Какво разбираш под това А да не знае за Ц? Нали имаш преходен сайт Б, който при всяко положение ще знае за А и Ц.

А знае само за Б.
Б знае за А и Ц.
Ц знае само за Б.

Схванах ти логиката, но не разбирам какво искаш да правиш точно. Каква информация обработваш? Какво прехвърляш от C на B към А?
 
dakata__92 каза:
А знае само за Б.
Б знае за А и Ц.
Ц знае само за Б.
Малка поправка

А знае за Б и Ц.
Б знае за А и Ц.
Ц знае само за Б.

А трябва да получава информацията от Ц, но Ц не трябва да знае, че е за А, защото ще го блокира. Тук се намесва Б, който няма проблеми да получава информация от Ц.

Аз имам контрол само върху А и Б и затова правя тази хамалогия. Проблема е, че А сайт е в дарк нета, а доста сайтове не ги харесват поради куп причини и по някое време просто бива блокиран. Затова минава през сайт Б, който си е в "чистия" нет.
 
Значи, първо не трябва на А да имаш някакви връзки или директни заявки към Ц. А трябва да направи заявка към Б, Б трябва да извърши логиката си за обработка да смени информацията за браузъра, референции и прочие и от там да върне на А вече взетите резултати. Така А няма да има директна връзка с Ц освен ако по IP не се получи връзката. Б трябва да използва IP адреса на Б или някое прокси, защото когато А прави заявката с нейното IP към Б, IP-то на А се ползва и за Ц. Смисъл все едно един потребител има свое IP и прави заявка на някаква страница за да вземе резултат, използва се неговото ИП за обработка, не примерно на CRON JOB както е да се ползва IP-то на сайта.
 
dakata__92 каза:
Значи, първо не трябва на А да имаш някакви връзки или директни заявки към Ц. А трябва да направи заявка към Б, Б трябва да извърши логиката си за обработка да смени информацията за браузъра, референции и прочие и от там да върне на А вече взетите резултати. Така А няма да има директна връзка с Ц освен ако по IP не се получи връзката. Б трябва да използва IP адреса на Б или някое прокси, защото когато А прави заявката с нейното IP към Б, IP-то на А се ползва и за Ц. Смисъл все едно един потребител има свое IP и прави заявка на някаква страница за да вземе резултат, използва се неговото ИП за обработка, не примерно на CRON JOB както е да се ползва IP-то на сайта.
Това е изпълнено.
Почти няма вариант Ц да разбере IP-то на А. Това, което не ми е много ясно е дали все пак сайт Ц би забелязал, че заявките само преминават през сайт Б.. или за тях заявката си идва от Б само..
 
vinsbg каза:
dakata__92 каза:
Значи, първо не трябва на А да имаш някакви връзки или директни заявки към Ц. А трябва да направи заявка към Б, Б трябва да извърши логиката си за обработка да смени информацията за браузъра, референции и прочие и от там да върне на А вече взетите резултати. Така А няма да има директна връзка с Ц освен ако по IP не се получи връзката. Б трябва да използва IP адреса на Б или някое прокси, защото когато А прави заявката с нейното IP към Б, IP-то на А се ползва и за Ц. Смисъл все едно един потребител има свое IP и прави заявка на някаква страница за да вземе резултат, използва се неговото ИП за обработка, не примерно на CRON JOB както е да се ползва IP-то на сайта.
Това е изпълнено.
Почти няма вариант Ц да разбере IP-то на А. Това, което не ми е много ясно е дали все пак сайт Ц би забелязал, че заявките само преминават през сайт Б.. или за тях заявката си идва от Б само..

Той и да го забележи може само да блокира Б, без да знае за А, но от там идва проблема, че Б ще бъде спрян и ще трябва да си създаваш нов Б за да кореспондира с Ц. Ще трябва Б да го създадеш така че да не се набива на очи.
 
Нещо не мога да разбера кое от къде се взима. :D

Опиши какво очакваш и какво получаваш когато сайтът от който вземаш новините добави новина. С думи, използвай долното:

Код:
Х добавя новина 1
Х взема от Х новина 1
Х взема от Х новина 1
Х добавя новина 2
Х добавя новина 3
Х взема от Х новина 2
Х взема от Х новина 2
Х взема от Х новина 3
Х взема от Х новина 3

Замени Х със следващия сървър във веригата. Примерно:

Код:
А добавя новина 1
Б взема от А новина 1
В взема от А новина 1
А добавя новина 2
В взема от А новина 2
Б взема от А новина 2
 
eLite каза:

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

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

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

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

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

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

Аз (сайт А) искам да си купя цигари от магазина обаче нямам 18 години и продавача ( Сайт Ц ) няма да ми продаде. Затова давам парите на теб ( сайт Б ), защото ти има 18 години. Ти ми ги купуваш и ми ги носиш. Това е.
 
Ясно стана още от първия пример. :D

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

Имаш ли framework на B?
 
eLite каза:
Ясно стана още от първия пример. :D

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

Имаш ли framework на B?
Не .. няколко php файла, но нищо съществено, но трябва да има със сигурност нещо там, за да замаскирва :)
 
Какво е Api-то на Сайт C - REST / SOAP?
Как изпращаш данните - POST / GET?
Какъв формат на данни получаваш - JSON / XML?
 
eLite каза:
Какво е Api-то на Сайт C - REST / SOAP?
Как изпращаш данните - POST / GET?
Какъв формат на данни получаваш - JSON / XML?

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

PHP:
<?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.
 
Благодарско! Днес ще го пробвам. Имам обаче 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 ?
 
Това е примерен клас, така че можеш да махнеш каквото ти трябва.

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

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

Горе