PHP прокси для вызова Twitter Twitter API (с динамическим массивом get) - PullRequest
2 голосов
/ 22 апреля 2011

Я разработал этот твиттер-проект во флэш-памяти, и как только я закончил и попытался выложить его в сеть, я столкнулся с ошибкой песочницы.Из того, что я прочитал, похоже, что мне просто нужно настроить прокси-файл php.Который я понимаю и понимаю.Все учебники, которые я смог найти, были для простых URL-адресов без передачи данных GET в URL.Для моего проекта данные GET являются динамическими, поэтому я не могу просто поместить URL-адрес набора в прокси-сервер php, и я недостаточно хорошо понимаю php, чтобы выяснить, как получить данные в URL-адрес прокси-сервера ... так вот что я знаю, какчтобы отредактировать во Flex: enter image description here

вот полный пример API-вызова, который мне нужно было бы сделать:

http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=brybam&?page=1

, и вот прокси-скрипт php, рекомендованный онлайн:

<?php

$post_data = $HTTP_RAW_POST_DATA;

$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($post_data);

$ch = curl_init( $_GET['url'] ); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

if ( strlen($post_data)>0 ){
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}

$response = curl_exec($ch);     
$response_headers = curl_getinfo($ch);     

if (curl_errno($ch)) {
    print curl_error($ch);
} else {
    curl_close($ch);
    header( 'Content-type: ' . $response_headers['content-type']);
    print $response;
}


?>

Хорошо, чтобы начать, мне просто нужно превратить скрипт php в файл, похожий на twitter.php, и просто поместить его в мой домен.Затем я предполагаю, что в поле URL для настройки службы http во Flex поместите и снова введите его примерно так:

http://mydomain.com/twitter.php?screen_name=brybam&?page=1

ТАК что я спрашиваю, потому что мое понимание php очень ограничено, насколько точноя бы взял приведенный выше скрипт и сделал бы его способным передавать

http://mydomain.com/twitter.php?screen_name=brybam&?page=1

с помощью Flex и иметь возможность принимать разные потенциальные аргументы?

Я думаю, что это может быть что-то вроде

$page = $_GET['page'];
$screen_name = $_GET['screen_name'];

в файле php, но я не уверен, куда мне следует помещать переменные, чтобы сделать их частью URL

Я уверен, что это торт, если вы знаете php, и было бы здорово, если быкто-то может помочь мне с этим, спасибо!

РЕДАКТИРОВАТЬ: я пробовал это, но получил ошибку (ошибка опубликована под тем, что я пытался)

<?php
$page = $_GET['page'];
$screen_name = $_GET['screen_name'];
$url = $_GET['url'];
$post_data = $HTTP_RAW_POST_DATA;

$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($post_data);

$ch = curl_init("'url'?screen_name='$screen_name'&?page='$page'"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

if ( strlen($post_data)>0 ){
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}

$response = curl_exec($ch);     
$response_headers = curl_getinfo($ch);     

if (curl_errno($ch)) {
    print curl_error($ch);
} else {
    curl_close($ch);
    header( 'Content-type: ' . $response_headers['content-type']);
    print $response;
}


?>

ошибка msg:

The response is not a valid XML or a JSON string.

Error on line 1 of document : The element type "meta" must be terminated by the matching end-tag "". Nested exception: The element type "meta" must be terminated by the matching end-tag "".

1 Ответ

2 голосов
/ 22 апреля 2011

Это работает :

<?php

$post_data = $HTTP_RAW_POST_DATA;

$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($post_data);

$screen_name = $_GET['screen_name'];
$page = $_GET['page'];

$url = "http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=$screen_name&page=$page";

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

if ( strlen($post_data)>0 ){
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}

$response = curl_exec($ch);     
$response_headers = curl_getinfo($ch);     

if (curl_errno($ch)) {
    print curl_error($ch);
} else {
    curl_close($ch);
    header( 'Content-type: ' . $response_headers['content-type']);
    print $response;
}
?>

Хотя, если вы собираетесь вызывать больше, чем просто один вызов API, вы можете рассмотреть возможность создания строки запроса в ASи просто прикрепив всю строку к концу домена.

IE.

вы бы передали что-то вроде "1 / statuses / user_timeline.xml? screen_name = brybam &? page = 1"к одному параметру.

И ваш php будет выглядеть следующим образом ...

$query= $_GET['query'];
$url = "http://api.twitter.com/$query";

Или даже лучше, создайте свой собственный API службы, который использует ваши собственные вызовы API, специфичные для вашего приложения.Таким образом, вам не нужно перестраивать SWF, если и когда API Twitter меняется.

...