Маршрутные сайты на любом языке на основе Google.Maps - под бурж траф и AdSense

G2
На сайте с 27.10.2009
Offline
62
#51
Kedr777:
Не костыль в данном случае. Не знаю, AlexVenga писал это чудо или кто-то другой, но реализация интересная и довольно продуманная. Решение логичное по рекомендациям Яндекса ... Зато больше проблем с Яшей не будет.:)

Можно ссылку на документацию, по которой это логично? В Песочнице это выглядит так:

https://tech.yandex.ru/maps/jsbox/2.1/deliveryCalculator

т.е. используется именно API, которое генерирует такого вида путь:

https://api-maps.yandex.ru/services/route/2.0/?callback=id_144689920680551510226&lang=ru_RU&token=036b265e71fac8745f3287d9664fa2b1&rll=30.523639%2C50.450361~33.11641243749999%2C51.818831210010366&rtm=atm&sco=latlong&results=1&search_type=geo

А вот по поводу хардкодных путей и самостоятельного использования в основном такое: http://clubs.ya.ru/mapsapi/replies.xml?item_no=39884

Кстати, на счет "проблем не будет" - все жестко заданные URL сломаются в тот самый момент, как яндекс надумает поменять отдаваемую структуру. И если через YMaps API достаточно будет подсунуть новую версию библиотеки, то при ручной реализации надо будет переписывать и жестко заданный путь, и парсинг. Это, кстати, не за горами, учитывая что актуальная версия сервисов "services/route/2.0", и "services/route/1.x" могут просто отключить в любой момент.

КакМаршрутник (http://goo.gl/forms/hMgaH0s9E5) — как маршрутник, но работает.
Kedr777
На сайте с 06.12.2010
Offline
111
#52
ghost28:
Можно ссылку на документацию, по которой это логично?

Вы видели мое решение? Не нужно выдергивать фразы из контента и городить сумбур.

Яндекс может многое изменить, но географические координаты ему перерисовать не под силу.:)

G2
На сайте с 27.10.2009
Offline
62
#53

Я, разумеется, не видел вашего решения, но физически отключить роут "services/route/1.x" ему вполне по силам. За последние пару лет такое уже было с яндекс апи, и ютубовским (когда /2.x/ вырубили полностью).

Sah
На сайте с 25.01.2009
Offline
97
Sah
#54
Dex2001:
Да, с картой яндекса, ревизия самая первая, покупал летом 14го.

Когда была проблема с переходом на https, у самого не получилось поправить, но достучался таки до ТС, он исправил что то и до сих пор всё работает (карта, растояния, время, топливо и тд и тп).

Зайдя в директорию файлов на сервере можно же определить последние измененные файлы по дате. Не пробовали? Узнав какие файлы он правил уже легче искать решение. А то у меня сегодня один программист долго искал проблему, но не нашел, а так было бы известно направление.

G2
На сайте с 27.10.2009
Offline
62
#55
Sah:
Зайдя в директорию файлов на сервере можно же определить последние измененные файлы по дате. Не пробовали? Узнав какие файлы он правил уже легче искать решение. А то у меня сегодня один программист долго искал проблему, но не нашел, а так было бы известно направление.

Пообщались с Kedr777, очень приятный и думающий товарищ. Частично починили.

Файлы со стороны сервера:

cron/cron_create_route.php

include/find_route.php

В них дублируется код, изменения аналогичные:

1. Загрузка яндекс.карт переведена на https

 $load_url='http://api-maps.yandex.ru/2.1-dev/?lang=ru-RU&load=package.full';

=>
$load_url='https://api-maps.yandex.ru/2.1-dev/?lang=ru-RU&load=package.full';

2. Геокодер тоже переехал на https:

get_url_from_yandex('https://geocode-maps.yandex.ru/1.x/?geocode=...

=>
get_url_from_yandex('https://geocode-maps.yandex.ru/1.x/?geocode=...

3. Старый сервис роутинга прикрыли

$load_url='https://api-maps.yandex.ru/services/route/1.2/route.xml?

lang=ru_RU&rll='.$city_start['locality']['x'].','.$city_start['locality']['y'].'~'.$city_end['locality']['x'].','.$city_end['locality']['y'].'&token='.$match[1][0];

=>
$load_url='https://api-maps.yandex.ru/services/route/2.0/?lang=ru_RU&rll='.$city_start['locality']['x'].','.$city_start['locality']['y'].'~'.$city_end['locality']['x'].','.$city_end['locality']['y'].'&token='.$match[1][0];

3.1. Изменился формат отдачи данных маршрута,


$route_string=get_url_from_yandex($load_url, 5);

if ($route_string!=false)
{
...

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

3.2. кроме координат

Ребята из яндекса, для добра и экономии места, закодировали все координаты в одну забавную строку вида

HKnJAc-kngNBAQAAw____-EAAACK____gQAAAG3___8gAAAAOP____D___8B____iv___879__9u_v__lfr__1n___-S_v__Kv___3T8__-w____Df7__xf____I_f__vv7__wL-__8_____a_7__6X___-w_v__PP___8j9__9N_v__XPv__6f___9h____9v7__9v-__-B_v__0P7__yD-__9h_v__kf7__xn-__8X____Tv7__5X____q_v__0v___2H____t____P____wcAAACQ____PwAAAP7-__9VAAAAJf___94BAABb_P__cQAAAFn___9-AAAAof___7sFAACl_f__IgEAAHH___9gAAAAwP___1kAAACg____oQAAABX___-5BQAAggAAAC8WAACaAQAApBUAAKkBAABVBAAAPQAAAEQFAAAPAAAAjgMAAM7____qAwAAg____wEDAAB9____QgMAAE7___81EwAAuPr__2gDAABU____QQMAAJr___8XCwAAGP___3YPAACj_v__9QYAAIL___80BgAAwf___7ADAADm____pwQAABAAAAA9DQAAwQAAAPb___-5AAAADwAAAHEAAAAsAAAAoAAAAEoAAACkAQAAtf___-oBAABWAAAAvgQAAK4AAABoAQAAufz__5cEAAD6-___TQIAAKn-__8VAAAA3_f__1MGAACH_v__agEAABP3__9xAgAAdfr__wABAAAu_P__SQIAAKr8__82AgAAF_7__z0DAAC0AAAAJQEAAAQAAABVAQAAyPz__6IFAADl_v__fQIAAEb-__8_AQAAz____2MCAAClAAAATgIAAC0AAABEAQAAJwEAAHUBAADMAAAAOwEAAKX___-8AAAA9P7__9IAAABq____OwEAAP_-__8hAQAA3f3__94BAABI_v__WwEAADP-__8xAQAAhvz__6YCAAA9_v__-AEAAA

Это порядка 60 координат. И я не знаю как их разобрать, без эмуляции браузера. Если у кого-то есть хороший, добрый и ласковый JS-монстр, можно попробовать его натравить на декодер, который вшит в АПИ яндекс.карт. Из неприятного - он минифицирован. Из приятного - он не обфусцирован. Выглядит так:

base64


"jY",function x756(e,t){var n=t.defineClass;e.define("util.base64",[],function(e){var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r={encode:function(e,r){var i=typeof e=="string";if(typeof btoa!="undefined")return i||(e=String.fromCharCode.apply(String,e)),r?btoa(e).replace(/\//g,"_").replace(/\+/g,"-"):btoa(e);var s=[],o,u,a,f,l,c,h,p=0,d=e.length,v=r?t:n;while(p<d)i?(o=e.charCodeAt(p++),u=e.charCodeAt(p++),a=e.charCodeAt(p++)):(o=e[p++],u=e[p++],a=e[p++]),f=o>>2,l=(o&3)<<4|u>>4,c=(u&15)<<2|a>>6,h=a&63,isNaN(u)?c=h=64:isNaN(a)&&(h=64),s.push(v.charAt(f),v.charAt(l),v.charAt(c),v.charAt(h));return s.join("")},decode:function(e,r){if(typeof atob!="undefined")return r?atob(e.replace(/_/g,"/").replace(/-/g,"+")):atob(e);var i=r?t:n,s=[],o,u,a,f,l,c,h,p=0,d=(e=e.replace(/[^A-Za-z0-9\-\+_\=]/g,"")).length;while(p<d)f=i.indexOf(e.charAt(p++)),l=i.indexOf(e.charAt(p++)),c=i.indexOf(e.charAt(p++)),h=i.indexOf(e.charAt(p++)),o=f<<2|l>>4,u=(l&15)<<4|c>>2,a=(c&3)<<6|h,s.push(String.fromCharCode(o)),c!=64&&s.push(String.fromCharCode(u)),h!=64&&s.push(String.fromCharCode(a));return s.join("")}};e(r)})}

coordinates.decode


"j$",function x765(e,t){var n=t.defineClass;e.define("util.coordinates.decode",["util.base64"],function(e,t){var n=1e6,r=function(e){var r=t.decode(e,!0),i=r.length,s=0,o=[0,0],u=[];while(s<i){var a=0,f=0,l=0,c=r.substr(s,8);while(l<4)a|=c.charCodeAt(l)<<l*8,f|=c.charCodeAt(l+4)<<l*8,l++;var h=[a/n,f/n],p=[h[0]+o[0],h[1]+o[1]];o=p,u.push(p),s+=8}return u};e(r)})}
Kedr777
На сайте с 06.12.2010
Offline
111
#56

Добавлю по погоде:

Заменяем:

http://api.openweathermap.org/data/2.5/weather?lat={:CITY_START_Y:}&lon={:CITY_START_X:}&units=metric&lang=ru

http://api.openweathermap.org/data/2.5/weather?lat={:CITY_END_Y:}&lon={:CITY_END_X:}&units=metric&lang=ru

На:

http://api.openweathermap.org/data/2.5/weather?lat={:CITY_START_Y:}&lon={:CITY_START_X:}&appid=xxxxxxxxxxxxxxxxxxx&units=metric&lang=ru

http://api.openweathermap.org/data/2.5/weather?lat={:CITY_END_Y:}&lon={:CITY_END_X:}&appid=xxxxxxxxxxxxxxxxxxx&units=metric&lang=ru

------------------

Прогноз погоды по API берется с openweathermap.org, если забанили, - нужно получить ключ.

Регестрируемся по адресу: http://home.openweathermap.org/users/sign_up - ключ бесплатный.

Свой ключ вводим в файле route.html, в двух строчках вместо xxxxxxxxxxxxxxxxxxx

Sah
На сайте с 25.01.2009
Offline
97
Sah
#57
ghost28:
Пообщались с Kedr777, очень приятный и думающий товарищ. Частично починили.

Что, маршрут на карте прокладывается?



Файлы со стороны сервера:
cron/cron_create_route.php
include/find_route.php


3.1. Изменился формат отдачи данных маршрута,

$route_string=get_url_from_yandex($load_url, 5);

if ($route_string!=false)
{
...

Тоесть если у меня $route_string=get_url_from_yandex($load_url, 100); - то 100 нужно заменить на 5, правильно?

G2
На сайте с 27.10.2009
Offline
62
#58
Sah:

Тоесть если у меня $route_string=get_url_from_yandex($load_url, 100); - то 100 нужно заменить на 5, правильно?

Нет, не так.

Вам надо заменить часть парсера следующую за той строчкой, до закрывающей "}", на то что по ссылке.

100 на 5 я бы не менял.

Sah:
Что, маршрут на карте прокладывается?

На счет прокладывания маршрута - уточните у Kedr777 - на браузерной части у него уже все работало. Полагаю, у вас используется старый JS API карт, и он больше не поддерживается.

faqbill
На сайте с 09.11.2009
Offline
100
#59

Ребята, огромная просьба, опишите все подробно, что на что поменять, что то у меня не получается, запутано все во всех сообщениях. Заранее огромное спасибо.

G2
На сайте с 27.10.2009
Offline
62
#60

Отписал в ЛС. Если кто в курсе:

- движок в процессе менялся? Если нет, состряпаю чуть более подробную инструкцию "для всех"

- кому-то эти сайты актуальны? Если человека 3-4, в индивидуальном порядке подскажу, если кому-то интересно, есть идеи как привести его в чувство после небольших доработок.

Я смотрел только в PHP часть. Вопросы по JS (в браузере не отрисовывается маршрут, etc) - к Kedr777, или отписывайте ссылку, чтобы я мог взглянуть.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий