За последние 24 часа нас посетили 18345 программистов и 1634 робота. Сейчас ищет 1731 программист ...

xml через прокси

Тема в разделе "PHP для новичков", создана пользователем boomrest, 11 сен 2009.

  1. boomrest

    boomrest Активный пользователь

    С нами с:
    27 авг 2009
    Сообщения:
    18
    Симпатии:
    0
    Код парсинга погоды

    PHP:
    1. <?
    2. if(!defined("DNREAD")) exit();
    3. $bt = "";
    4. // ПАРАМЕТРЫ
    5. // Не забудьте о копирайтах Гисметео! =)
    6. $simple = implode(file('http://informer.gismeteo.ru/xml/28225_1.xml')); // [url=http://informer.gismeteo.ru/xml/]http://informer.gismeteo.ru/xml/[/url]КОД_ГОРОДА_ЦИФРАМИ_1.xml
    7. $img = "up/i/"; // Папка с изображениями облачности и осадков
    8. $imgr = "gif"; // Тип изображений (расширение)
    9. $tw = "158"; // Рабочая часть блока (пикселей или процентов)
    10. $i_w = "16"; // Ширина изображений облачности и осадков (для правильного отображения страницы)
    11. // ТЕКСТ
    12. $tnight = "Ночью"; // Ночьной текст
    13. $tmorning = "Утром"; // Утренний текст
    14. $daytime = "Днем"; // Дневной текст
    15. $evening = "Вечером"; // Вечерний текст
    16. $tad = "Атм. давление"; // Атмосферный текст
    17. $tvv = "Влажность воздуха"; // Влажный текст
    18.  
    19. // ПАРСИНГ XML-ФАЙЛА
    20. xml_parser_set_option($xml,XML_OPTION_CASE_FOLDING,0);
    21. xml_parser_set_option($xml,XML_OPTION_SKIP_WHITE,1);
    22. $indexes = array();
    23. $values = array();
    24. xml_parse_into_struct($xml,$simple, $values, $indexes);
    25.  
    26. // ПРИСВОЕНИЕ АТРИБУТОВ
    27. $tod=array('0'=>"$tnight",'1'=>"$tmorning",'2'=>"$daytime",'3'=>"$evening");
    28. $cloudiness=array('0'=>"00.$imgr",'1'=>"01.$imgr",'2'=>"02.$imgr",'3'=>"03.$imgr");
    29. $cloudinessalt=array('0'=>"ясно",'1'=>"переменная облачность",'2'=>"облачно",'3'=>"пасмурно");
    30. $precipitation=array('4'=>"04.$imgr",'5'=>"05.$imgr",'6'=>"06.$imgr",'7'=>"07.$imgr",'8'=>"08.$imgr",'9'=>"09.$imgr",'10'=>"10.$imgr");
    31. $precipitationalt=array('4'=>"дождь",'5'=>"ливень",'6'=>"снег",'7'=>"снег",'8'=>"гроза",'9'=>"нет данных",'10'=>"без осадков");
    32. // ВЫВОД ПОГОДЫ
    33. $bt.="<table width=\"$tw\" border=\"0\">\n";
    34. // ПОГОДА НОЧЬЮ
    35. $t1=$values[3]["attributes"]["tod"];
    36. $t1=$tod["$t1"];
    37. $c1=$values[4]["attributes"]["cloudiness"];
    38. $ac1=$cloudinessalt["$c1"];
    39. $c1=$cloudiness["$c1"];
    40. $p1=$values[4]["attributes"]["precipitation"];
    41. $ap1=$precipitationalt["$p1"];
    42. $p1=$precipitation["$p1"];
    43. $tv1=($values[6]["attributes"]["min"] > 0) ? '+'.$values[6]["attributes"]["min"] : ''.$values[6]["attributes"]["min"];
    44. $tvm1=($values[6]["attributes"]["max"] > 0) ? '+'.$values[6]["attributes"]["max"] : ''.$values[6]["attributes"]["max"];
    45. $bt.="<tr valign=\"middle\" align=\"right\">\n";
    46. $bt.="<td width=\"18%\">".$t1.": </td><td width=\"25%\"><b>".$tv1."</b>..<b> ".$tvm1."</b> °C</td><td width=\"20%\" align=\"right\"><img src=\"$img$c1\" alt=\"$ac1\" width=\"$i_w\"><img src=\"".$img.$p1."\" alt=\"$ap1\" width=\"$i_w\"></td>\n";
    47. $bt.="</tr>\n";
    48. // ПОГОДА УТРОМ
    49. $t2=$values[11]["attributes"]["tod"];
    50. $t2=$tod["$t2"];
    51. $c2=$values[12]["attributes"]["cloudiness"];
    52. $ac2=$cloudinessalt["$c2"];
    53. $c2=$cloudiness["$c2"];
    54. $p2=$values[12]["attributes"]["precipitation"];
    55. $ap2=$precipitationalt["$p2"];
    56. $p2=$precipitation["$p2"];
    57. $tv2=($values[14]["attributes"]["min"] > 0) ? '+'.$values[14]["attributes"]["min"] : ''.$values[14]["attributes"]["min"];
    58. $tvm2=($values[14]["attributes"]["max"] > 0) ? '+'.$values[14]["attributes"]["max"] : ''.$values[14]["attributes"]["max"];
    59. $bt.="<tr valign=\"middle\" align=\"right\">\n";
    60. $bt.="<td width=\"18%\">".$t2.": </td><td width=\"25%\"><b>".$tv2."</b>..<b> ".$tvm2."</b> °C</td><td width=\"20%\" align=\"right\"><img src=\"$img$c2\" alt=\"$ac2\" width=\"$i_w\"><img src=\"".$img.$p2."\" alt=\"$ap2\" width=\"$i_w\"></td>\n";
    61. $bt.="</tr>\n";
    62. // ПОГОДА ДНЕМ
    63. $t3=$values[19]["attributes"]["tod"];
    64. $t3=$tod["$t3"];
    65. $c3=$values[20]["attributes"]["cloudiness"];
    66. $ac3=$cloudinessalt["$c3"];
    67. $c3=$cloudiness["$c3"];
    68. $p3=$values[20]["attributes"]["precipitation"];
    69. $ap3=$precipitationalt["$p3"];
    70. $p3=$precipitation["$p3"];
    71. $tv3=($values[22]["attributes"]["min"] > 0) ? '+'.$values[22]["attributes"]["min"] : ''.$values[22]["attributes"]["min"];
    72. $tvm3=($values[22]["attributes"]["max"] > 0) ? '+'.$values[22]["attributes"]["max"] : ''.$values[22]["attributes"]["max"];
    73. $bt.="<tr valign=\"middle\" align=\"right\">\n";
    74. $bt.="<td width=\"18%\">".$t3.": </td><td width=\"25%\"><b>".$tv3."</b>..<b> ".$tvm3."</b> °C</td><td width=\"20%\" align=\"right\"><img src=\"$img$c3\" alt=\"$ac3\" width=\"$i_w\"><img src=\"".$img.$p3."\" alt=\"$ap3\" width=\"$i_w\"></td>\n";
    75. $bt.="</tr>\n";
    76. // ПОГОДА ВЕЧЕРОМ
    77. $t4=$values[27]["attributes"]["tod"];
    78. $t4=$tod["$t4"];
    79. $c4=$values[28]["attributes"]["cloudiness"];
    80. $ac4=$cloudinessalt["$c4"];
    81. $c4=$cloudiness["$c4"];
    82. $p4=$values[28]["attributes"]["precipitation"];
    83. $ap4=$precipitationalt["$p4"];
    84. $p4=$precipitation["$p4"];
    85. $tv4=($values[30]["attributes"]["min"] > 0) ? '+'.$values[30]["attributes"]["min"] : ''.$values[30]["attributes"]["min"];
    86. $tvm4=($values[30]["attributes"]["max"] > 0) ? '+'.$values[30]["attributes"]["max"] : ''.$values[30]["attributes"]["max"];
    87. $bt.="<tr valign=\"middle\" align=\"right\">\n";
    88. $bt.="<td width=\"18%\">".$t4.": </td><td width=\"25%\"><b>".$tv4."</b>..<b> ".$tvm4."</b> °C</td><td width=\"20%\" align=\"right\"><img src=\"$img$c4\" alt=\"$ac4\" width=\"$i_w\"><img src=\"".$img.$p4."\" alt=\"$ap4\" width=\"$i_w\"></td>\n";
    89. $bt.="</tr>\n";
    90. $bt.="</table>\n";
    91. // ДАВЛЕНИЕ И ВЛАЖНОСТЬ
    92. $bt.="<table width=\"$tw\" border=0>\n";
    93. $ad=$values[21]["attributes"]["min"];
    94. $vv=$values[24]["attributes"]["min"];
    95. $bt.="<tr valign=\"middle\" align=\"right\"><td width=\"100%\">".$tad.": ".$ad." мм<br>".$tvv.": ".$vv." %</td>\n";
    96. $bt.="</tr>\n";
    97. $bt.="</table>";
    98. return $bt;
    99. ?>
    Вопрос в следующем:
    Стоит комп в локальной сети с Денвером. Инет на этом компе через прокси.
    Подскажите, люди добрые, как изменить этот код, чтоб через прокси работал?
    Спасибо
     
  2. LuckyScrat

    LuckyScrat Активный пользователь

    С нами с:
    16 июн 2009
    Сообщения:
    176
    Симпатии:
    0
    Адрес:
    Москва
    не использовать file для загрузки, использовать curl он умеет работать через прокси
     
  3. boomrest

    boomrest Активный пользователь

    С нами с:
    27 авг 2009
    Сообщения:
    18
    Симпатии:
    0
    Не могли бы Вы изменить код в 1 посте под curl, для примера.
     
  4. boomrest

    boomrest Активный пользователь

    С нами с:
    27 авг 2009
    Сообщения:
    18
    Симпатии:
    0
    Кто-нибудь может мне помочь?
     
  5. boomrest

    boomrest Активный пользователь

    С нами с:
    27 авг 2009
    Сообщения:
    18
    Симпатии:
    0
    Что некому помочь. Никто не знает что ли?
     
  6. LuckyScrat

    LuckyScrat Активный пользователь

    С нами с:
    16 июн 2009
    Сообщения:
    176
    Симпатии:
    0
    Адрес:
    Москва
    написать за вас код? этому никому не нужно. направление мысли я вам дал, учитесь писать код сами, никто его за вас это делать не будет.
     
  7. boomrest

    boomrest Активный пользователь

    С нами с:
    27 авг 2009
    Сообщения:
    18
    Симпатии:
    0
    Спасибо. Направление есть. Я ж не прошу прям все за меня писать. Поправить надо бы.
    Вот что получилось:
    PHP:
    1.  
    2. <?
    3.  
    4. function get($url,$proxy)
    5. { $ch = curl_init();
    6. curl_setopt($ch, CURLOPT_URL,$url);
    7. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    8. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
    9. curl_setopt($ch, CURLOPT_PROXY, "$proxy"); $ss=curl_exec($ch); curl_close($ch); return $ss;
    10. }
    11.  
    12. if(!defined("DNREAD")) exit();
    13. $bt = "";
    14.  
    15. $prox = 'ип:порт'; // адрес прокси
    16. $a=get('http://informer.gismeteo.ru/xml/27612_1.xml',$prox);
    17.  
    18. $simple = implode(file('$a'));
    19. $img = "up/i/"; // Папка с изображениями облачности и осадков
    20. $imgr = "gif"; // Тип изображений (расширение)
    21. $tw = "158"; // Рабочая часть блока (пикселей или процентов)
    22. $i_w = "16"; // Ширина изображений облачности и осадков (для правильного отображения страницы)
    23. // ТЕКСТ
    24. $tnight = "Ночью"; // Ночьной текст
    25. $tmorning = "Утром"; // Утренний текст
    26. $daytime = "Днем"; // Дневной текст
    27. $evening = "Вечером"; // Вечерний текст
    28. $tad = "Атм. давление"; // Атмосферный текст
    29. $tvv = "Влажность воздуха"; // Влажный текст
    30.  
    31. // ПАРСИНГ XML-ФАЙЛА
    32. xml_parser_set_option($xml,XML_OPTION_CASE_FOLDING,0);
    33. xml_parser_set_option($xml,XML_OPTION_SKIP_WHITE,1);
    34. $indexes = array();
    35. $values = array();
    36. xml_parse_into_struct($xml,$simple, $values, $indexes);
    37.  
    38. // ПРИСВОЕНИЕ АТРИБУТОВ
    39. $tod=array('0'=>"$tnight",'1'=>"$tmorning",'2'=>"$daytime",'3'=>"$evening");
    40. $cloudiness=array('0'=>"00.$imgr",'1'=>"01.$imgr",'2'=>"02.$imgr",'3'=>"03.$imgr");
    41. $cloudinessalt=array('0'=>"ясно",'1'=>"переменная облачность",'2'=>"облачно",'3'=>"пасмурно");
    42. $precipitation=array('4'=>"04.$imgr",'5'=>"05.$imgr",'6'=>"06.$imgr",'7'=>"07.$imgr",'8'=>"08.$imgr",'9'=>"09.$imgr",'10'=>"10.$imgr");
    43. $precipitationalt=array('4'=>"дождь",'5'=>"ливень",'6'=>"снег",'7'=>"снег",'8'=>"гроза",'9'=>"нет данных",'10'=>"без осадков");
    44. // ВЫВОД ПОГОДЫ
    45. $bt.="<table width="$tw" border="0">\n";
    46. // ПОГОДА НОЧЬЮ
    47. $t1=$values[3]["attributes"]["tod"];
    48. $t1=$tod["$t1"];
    49. $c1=$values[4]["attributes"]["cloudiness"];
    50. $ac1=$cloudinessalt["$c1"];
    51. $c1=$cloudiness["$c1"];
    52. $p1=$values[4]["attributes"]["precipitation"];
    53. $ap1=$precipitationalt["$p1"];
    54. $p1=$precipitation["$p1"];
    55. $tv1=($values[6]["attributes"]["min"] > 0) ? '+'.$values[6]["attributes"]["min"] : ''.$values[6]["attributes"]["min"];
    56. $tvm1=($values[6]["attributes"]["max"] > 0) ? '+'.$values[6]["attributes"]["max"] : ''.$values[6]["attributes"]["max"];
    57. $bt.="<tr valign="middle" align="right">\n";
    58. $bt.="<td width="18%">".$t1.": </td><td width="25%"><b>".$tv1."</b>..<b> ".$tvm1."</b> °C</td><td width="20%" align="right"><img src="$img$c1" alt="$ac1" width="$i_w"><img src="".$img.$p1."" alt="$ap1" width="$i_w"></td>\n";
    59. $bt.="</tr>\n";
    60. // ПОГОДА УТРОМ
    61. $t2=$values[11]["attributes"]["tod"];
    62. $t2=$tod["$t2"];
    63. $c2=$values[12]["attributes"]["cloudiness"];
    64. $ac2=$cloudinessalt["$c2"];
    65. $c2=$cloudiness["$c2"];
    66. $p2=$values[12]["attributes"]["precipitation"];
    67. $ap2=$precipitationalt["$p2"];
    68. $p2=$precipitation["$p2"];
    69. $tv2=($values[14]["attributes"]["min"] > 0) ? '+'.$values[14]["attributes"]["min"] : ''.$values[14]["attributes"]["min"];
    70. $tvm2=($values[14]["attributes"]["max"] > 0) ? '+'.$values[14]["attributes"]["max"] : ''.$values[14]["attributes"]["max"];
    71. $bt.="<tr valign="middle" align="right">\n";
    72. $bt.="<td width="18%">".$t2.": </td><td width="25%"><b>".$tv2."</b>..<b> ".$tvm2."</b> °C</td><td width="20%" align="right"><img src="$img$c2" alt="$ac2" width="$i_w"><img src="".$img.$p2."" alt="$ap2" width="$i_w"></td>\n";
    73. $bt.="</tr>\n";
    74. // ПОГОДА ДНЕМ
    75. $t3=$values[19]["attributes"]["tod"];
    76. $t3=$tod["$t3"];
    77. $c3=$values[20]["attributes"]["cloudiness"];
    78. $ac3=$cloudinessalt["$c3"];
    79. $c3=$cloudiness["$c3"];
    80. $p3=$values[20]["attributes"]["precipitation"];
    81. $ap3=$precipitationalt["$p3"];
    82. $p3=$precipitation["$p3"];
    83. $tv3=($values[22]["attributes"]["min"] > 0) ? '+'.$values[22]["attributes"]["min"] : ''.$values[22]["attributes"]["min"];
    84. $tvm3=($values[22]["attributes"]["max"] > 0) ? '+'.$values[22]["attributes"]["max"] : ''.$values[22]["attributes"]["max"];
    85. $bt.="<tr valign="middle" align="right">\n";
    86. $bt.="<td width="18%">".$t3.": </td><td width="25%"><b>".$tv3."</b>..<b> ".$tvm3."</b> °C</td><td width="20%" align="right"><img src="$img$c3" alt="$ac3" width="$i_w"><img src="".$img.$p3."" alt="$ap3" width="$i_w"></td>\n";
    87. $bt.="</tr>\n";
    88. // ПОГОДА ВЕЧЕРОМ
    89. $t4=$values[27]["attributes"]["tod"];
    90. $t4=$tod["$t4"];
    91. $c4=$values[28]["attributes"]["cloudiness"];
    92. $ac4=$cloudinessalt["$c4"];
    93. $c4=$cloudiness["$c4"];
    94. $p4=$values[28]["attributes"]["precipitation"];
    95. $ap4=$precipitationalt["$p4"];
    96. $p4=$precipitation["$p4"];
    97. $tv4=($values[30]["attributes"]["min"] > 0) ? '+'.$values[30]["attributes"]["min"] : ''.$values[30]["attributes"]["min"];
    98. $tvm4=($values[30]["attributes"]["max"] > 0) ? '+'.$values[30]["attributes"]["max"] : ''.$values[30]["attributes"]["max"];
    99. $bt.="<tr valign="middle" align="right">\n";
    100. $bt.="<td width="18%">".$t4.": </td><td width="25%"><b>".$tv4."</b>..<b> ".$tvm4."</b> °C</td><td width="20%" align="right"><img src="$img$c4" alt="$ac4" width="$i_w"><img src="".$img.$p4."" alt="$ap4" width="$i_w"></td>\n";
    101. $bt.="</tr>\n";
    102. $bt.="</table>\n";
    103. // ДАВЛЕНИЕ И ВЛАЖНОСТЬ
    104. $bt.="<table width="$tw" border=0>\n";
    105. $ad=$values[21]["attributes"]["min"];
    106. $vv=$values[24]["attributes"]["min"];
    107. $bt.="<tr valign="middle" align="right"><td width="100%">".$tad.": ".$ad." мм<br>".$tvv.": ".$vv." %</td>\n";
    108. $bt.="</tr>\n";
    109. $bt.="</table>";
    110. return $bt;
    111. ?>
    112.  
    Где 'ип' и 'порт' - ип и порт прокси соответственно.

    Посмотрите плиз, где ошибка. Не хочет данные хмл забирать и все тут.
     
  8. LuckyScrat

    LuckyScrat Активный пользователь

    С нами с:
    16 июн 2009
    Сообщения:
    176
    Симпатии:
    0
    Адрес:
    Москва
    не хочет забирать это не диагноз..
    ошибка какая ?
    error_reporting(E_ALL); в начало скрипта
     
  9. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    еще неплохо бы

    PHP:
    1. <?php
    2. ini_set('display_errors', 'on');
     
  10. boomrest

    boomrest Активный пользователь

    С нами с:
    27 авг 2009
    Сообщения:
    18
    Симпатии:
    0
    Да нет ошибки. Просто xml данных нет. Пусто.

    Выводит:
    Это информер погоды через xml.
    Подскажите почему данные не приходят через прокси? Что не так?
     
  11. LuckyScrat

    LuckyScrat Активный пользователь

    С нами с:
    16 июн 2009
    Сообщения:
    176
    Симпатии:
    0
    Адрес:
    Москва
    занимайтесь отладкой кода поэтапно. а не с конца.
    если ничего в $a нет смотрите в сторону ошибок curl`а.
    выведите curl_errno($ch)
     
  12. LuckyScrat

    LuckyScrat Активный пользователь

    С нами с:
    16 июн 2009
    Сообщения:
    176
    Симпатии:
    0
    Адрес:
    Москва
    а лучше curl_error($ch)
     
  13. boomrest

    boomrest Активный пользователь

    С нами с:
    27 авг 2009
    Сообщения:
    18
    Симпатии:
    0
    Вот ошибка: Warning: implode() [function.implode]: Argument to implode must be an array
    Но какая ему разница. Что я ему так
    PHP:
    1.  
    2. $simple = implode(file('http://informer.gismeteo.ru/xml/27612_1.xml'));
    3.  
    что так:
    PHP:
    1.  
    2. function get($url,$proxy)
    3. { $ch = curl_init();
    4. curl_setopt($ch, CURLOPT_URL,$url);
    5. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    6. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
    7. curl_setopt($ch, CURLOPT_PROXY, "$proxy"); $ss=curl_exec($ch); curl_close($ch); return $ss;
    8. }
    9. $prox = '10.87.64.9:8080'; // адрес прокси
    10. $a=get('http://informer.gismeteo.ru/xml/27612_1.xml',$prox);
    11. $simple = implode(file('$a'));
    12.  
    1 вариант работает
     
  14. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    а вы gettype()'ом посмотрите, что возвращает curl_exec().
     
  15. boomrest

    boomrest Активный пользователь

    С нами с:
    27 авг 2009
    Сообщения:
    18
    Симпатии:
    0
    curl_exec() string возвращает. Разобрался.
    Вот спасибо. Все заработало. Наставили меня на путь истинный :D
    Исправил. Кому интересно, вот:
    PHP:
    1.  
    2. function get($url,$proxy)
    3.  { $ch = curl_init();
    4.  curl_setopt($ch, CURLOPT_URL,$url);
    5.  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    6.  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
    7.  curl_setopt($ch, CURLOPT_PROXY, "$proxy"); $ss=curl_exec($ch); curl_close($ch); return $ss;
    8.  }
    9.  
    10.  if(!defined("DNREAD")) exit();
    11.  $bt = "";
    12.  
    13.  $prox = '10.87.64.9:8080'; // адрес прокси
    14.  $simple=get('http://informer.gismeteo.ru/xml/27612_1.xml',$prox);
    15.  
    ну и т. д.
     
  16. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    пожалуйста. обращайтесь еще и другим помогайте)