php прокси для флэш-вызова api twitter (с динамическим массивом get)

#php #apache-flex #twitter #proxy #get

#php #apache-flex #Twitter #прокси #получить

Вопрос:

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

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

 http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=brybamamp;?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=brybamamp;?page=1
  

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

 http://mydomain.com/twitter.php?screen_name=brybamamp;?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'amp;?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;
}


?>
  

сообщение об ошибке:

 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:

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

 <?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_nameamp;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=brybamamp;?page = 1» в один параметр.

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

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

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