Автоматическая загрузка треков

Никто из программистов не думал написать скрипт (на perl, например :stuck_out_tongue: ) для автоматической загрузки треков из определенной директории?

Где-то в вики видел. Он использует curl. Еще есть перловая библиотека для фильтрации треков и т.п.

Îíî?

<?php

$url = "http://www.openstreetmap.org/api/0.5/gpx/create";
$username="nick@hogweed.org";
$password="password";
$ch=curl_init ($url);
$formvars = array
    ("file"=>"@041107.gpx",
        "description"=>"Henley to Chithurst via Older Hill and Stedham",
        "tags"=>"West_Sussex footpaths",
        "public"=>1);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt ($ch, CURLOPT_HTTPHEADER,array("Expect:"));
curl_setopt ($ch,CURLOPT_USERPWD,"$username:$password");
curl_setopt($ch,CURLOPT_POST,1 );
curl_setopt($ch,CURLOPT_POSTFIELDS,$formvars);
$resp=curl_exec($ch);
$httpCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);

echo "Response: $resp, HTTP code: $httpCode";
?>

???, ???, ??-??? ??? ??? ??? ??? ??? ? ??? ??? ??? ?? ???

Это скрипт php. Только он загружает один единственный файл.
Прочитать содержимое директории можно так:
// create a handler for the directory
$handler = opendir($directory);

// keep going until all files in directory have been read
while ($file = readdir($handler)) {

 //  отправить файл $file
}

// close the handler
closedir($handler)

?? ??? ? ??? ??? ?? ??? :frowning:

??? ?? ???(“file”=>@$file,
? ??? ??? ??? ???-?? ??? “file”=>“c:\tracks\1.gpx”, ??? ?? ??? ???-?? ???.

<?php

$url = "http://www.openstreetmap.org/api/0.5/gpx/create";
$username="kekcuha";
$password="password";
$directory="c:\tracks\"

// create a handler for the directory
$handler = opendir($directory);

    // keep going until all files in directory have been read
    while ($file = readdir($handler)) {
    //  îòïðàâèòü ôàéë $file
$ch=curl_init ($url);
$formvars = array
    ("file"=>@$file,
        "description"=>"Car track",
        "tags"=>"Russia Moscow",
        "public"=>1);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt ($ch, CURLOPT_HTTPHEADER,array("Expect:"));
curl_setopt ($ch,CURLOPT_USERPWD,"$username:$password");
curl_setopt($ch,CURLOPT_POST,1 );
curl_setopt($ch,CURLOPT_POSTFIELDS,$formvars);
$resp=curl_exec($ch);
$httpCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);

echo "Response: $resp, HTTP code: $httpCode";

    }

    // close the handler
    closedir($handler)

?>

Ошибка в строке $directory="c:\tracks"
Лучше косые в другую сторону повернуть и не забывать ставить точку с запятой:
$directory=“c:/tracks/”;

Я попробовал получившийся скрипт. Получилось зайти на сервер. Но сервер прислал сообщение об ошибке. Дальше не стал разбираться.

Кстати, здесь http://wiki.openstreetmap.org/index.php/Batch_Upload пишут, что можно просто загрузить чере web-форму zip-архив с gpx-файлами.

На этой же странице приводится скрипт на perl и java

:mad:

Неделя мучений с vbx, php, curl’ом, а на той странице готовое решение.
СПАСИБО!

Имеется код:


$url='http://www.openstreetmap.org/api/0.6/node/'.$row_b[0].'/';
echo $url."<br>\n";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt ($ch, CURLOPT_HTTPHEADER,array("Expect:"));
$result_op = curl_exec($ch); /*сохраняем страницу, которая была выдана*/
echo "Вот: ".$result_op."<br>\n"; /*Выводим результат*/
$httpCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);
echo "Response: $result_op, HTTP code: $httpCode"."<br>\n";

Результат:

Куда девается xml?

HTTP Error 405 - Method not allowed
Убрать строчку с CURLOPT_POST.

Спасибо, заработало.

Подскажите как обратно на сервер закинуть данные?


$url = "http://www.openstreetmap.org/api/0.6/node/".$row_b[0];
//$url = "http://api06.dev.openstreetmap.org/api/0.6/".$row_b[0];
$username="Stud555";
$password="***";
$ch=curl_init ($url);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt ($ch, CURLOPT_HTTPHEADER,array("Expect:"));
curl_setopt ($ch,CURLOPT_USERPWD,"$username:$password");
curl_setopt($ch,CURLOPT_POST,1 );
curl_setopt($ch,CURLOPT_POSTFIELDS,$result_op);
$resp=curl_exec($ch);
$httpCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);

echo "Response: $resp, HTTP code: $httpCode";

Сейчас это выдает 405 ошибку. :frowning:

Если речь идет о загрузке треков, то $url, наверное, должен содержать ‘/gpx/create’, как в вышеприведенном примере KekcuHa, а не ‘/node/’.

Нет, речь идет именно о загрузке ноды.

CURLOPT_USERPWD это явно HTTP-авторизация. В данном случае нужно другое: логин на сервер и загрузка с передачей cookies.

Тогда надо использовать метод PUT, а не POST - см. http://wiki.openstreetmap.org/wiki/API_v0.6