Google maps для Symbian, база данных Cell ID в Google — Netmonitor GSM/UMTS: от телефонов до измерительных комплексов
-
- Гость
- Сообщения: 1
- Зарегистрирован: Пт, 15-05-2009, 09:40
- Откуда: Chelyabinsk
- Нетмонитор: SE S500
Очень нужна помощь!!!
Здравствуйте, помогите пожалуйста, я думаю если кто-нибудь ответит это будет полезно для новичков.
Проблема такая, из всего предложенного мне ничего не подошло. Скрипты на питоне и делфи - я эти языки вообще не знаю, программа Мобильные карты (МСК) - она координаты не собирает, какие-то непонятные значения типа 1001 37001 (1, 2, 3, 5, 6, 7), как с этим работать хз. Кому не лень и кто знает, выложите код на ПХП или на Си, хоть бы опишите какой запрос нужно сформировать к Гугл/Яндекс.
Спасибо.
Проблема такая, из всего предложенного мне ничего не подошло. Скрипты на питоне и делфи - я эти языки вообще не знаю, программа Мобильные карты (МСК) - она координаты не собирает, какие-то непонятные значения типа 1001 37001 (1, 2, 3, 5, 6, 7), как с этим работать хз. Кому не лень и кто знает, выложите код на ПХП или на Си, хоть бы опишите какой запрос нужно сформировать к Гугл/Яндекс.
Спасибо.
-
- Известный нетмониторщик
- Сообщения: 469
- Зарегистрирован: Пн, 02-02-2004, 21:46
- Откуда: Ростов на Дону
- Нетмонитор: Siemens S35
- Контактная информация:
Чем Питон то не нравится?
net = 25002
import urllib
a = '000E00000000000000000000000000001B0000000000000000000000030000'
try:
_for cid in range(65537)[4146:65536]:
__for lac in range(65537)[6100:6120]:
___b = hex(cid)[2:].zfill(8) + hex(lac)[2:].zfill(8)
___c = hex(divmod(net,100)[1])[2:].zfill(8) + hex(divmod(net,100)[0])[2:].zfill(8)
___string = (a + b + c + 'FFFFFFFF00000000').decode('hex')
___data = urllib.urlopen('http://www.google.com/glm/mmap',string)
___r = data.read().encode('hex')
___if len(r) > 14:
____print (lac, cid, '-', float(int(r[14:22],16))/1000000, float(int(r[22:30],16))/1000000, r)
# else:
# print (lac, cid, '- no data in google')
except:
_print ('connect error')
----------------
скачал питон 2 какой-то, на третьем - не работает, установил, запустил граыическую оболочку Питона, открыл ей текстовый файл со скриптом, подставил в скрипт свои цифирки и вперёд.
У нас - такая особенность, что CIDы уникальны, а лаков - несколько.
Вот и сделаны два вложенных цикла, в первом перебираются CIDы, от 4000 и до упора, а во вложенном - лаки от 6100 до 6119.
Как только программулька выдала Коннекшн еррор - скопировал всё найденное ею в эксель для последующего разбора, в скрипт вписал, с какого CID продолжать дальше, и вперёд.
net = 25002
import urllib
a = '000E00000000000000000000000000001B0000000000000000000000030000'
try:
_for cid in range(65537)[4146:65536]:
__for lac in range(65537)[6100:6120]:
___b = hex(cid)[2:].zfill(8) + hex(lac)[2:].zfill(8)
___c = hex(divmod(net,100)[1])[2:].zfill(8) + hex(divmod(net,100)[0])[2:].zfill(8)
___string = (a + b + c + 'FFFFFFFF00000000').decode('hex')
___data = urllib.urlopen('http://www.google.com/glm/mmap',string)
___r = data.read().encode('hex')
___if len(r) > 14:
____print (lac, cid, '-', float(int(r[14:22],16))/1000000, float(int(r[22:30],16))/1000000, r)
# else:
# print (lac, cid, '- no data in google')
except:
_print ('connect error')
----------------
скачал питон 2 какой-то, на третьем - не работает, установил, запустил граыическую оболочку Питона, открыл ей текстовый файл со скриптом, подставил в скрипт свои цифирки и вперёд.
У нас - такая особенность, что CIDы уникальны, а лаков - несколько.
Вот и сделаны два вложенных цикла, в первом перебираются CIDы, от 4000 и до упора, а во вложенном - лаки от 6100 до 6119.
Как только программулька выдала Коннекшн еррор - скопировал всё найденное ею в эксель для последующего разбора, в скрипт вписал, с какого CID продолжать дальше, и вперёд.
- h1-tek_deamon
- Гость
- Сообщения: 2
- Зарегистрирован: Пн, 22-06-2009, 15:39
- Откуда: Киев
- Нетмонитор: Sony Ericsson W610
скрипт + прокси
Невнимательно читал форум, в результате попал в бан у Гугла за скан широких диапазонов. Сдаваться не в моих правилах, потому решил поискать варианты работы через прокси. С экзешниками было просто: соксификация плюс туннель на http-прокси, а вот с питоном пришлось поднапрячься. Сразу оговорюсь, что в питоне я - полный ноль и исходил из соображений логики с применением методов научного "тыка". Уверен, знающие люди напишут грамотней.
net, lac, rnc = 25501, 1220, 0
import urllib2
proxy = "92.207.45.14:8080"
proxy = urllib2.ProxyHandler({"http" : proxy})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
a, i = '000E00000000000000000000000000001B0000000000000000000000030000', 0
file = open("ozi.wpt","w")
file.write('OziExplorer Waypoint File Version 1.0\nWGS 84\nReserved 2\nReserved 3\n')
try:
_for cid in range(65536)[1:65536]:
__b = hex(rnc*65536+cid)[2:].zfill(8) + hex(lac)[2:].zfill(8)
__c = hex(divmod(net,100)[1])[2:].zfill(8) + hex(divmod(net,100)[0])[2:].zfill(8)
__string = (a + b + c + 'FFFFFFFF00000000').decode('hex')
__data = urllib2.urlopen('http://www.google.com/glm/mmap',string)
__r = data.read().encode('hex')
__if len(r) > 14 and int(r[22:23],16)==0 :
___x, y, i = float(int(r[14:22],16))/1000000, float(int(r[22:30],16))/1000000, i+1
___print cid, '-', x, y
___file.write('%d, %d, %f, %f\n' % (i, cid, x, y))
except:
_print 'connect error'
file.close()
Хотелось бы, конечно, поддержку списка прокси, чтобы после смерти одной подхватывалась вторая и скан продолжался, но, к сожалению, это за пределами моих возможностей.
net, lac, rnc = 25501, 1220, 0
import urllib2
proxy = "92.207.45.14:8080"
proxy = urllib2.ProxyHandler({"http" : proxy})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
a, i = '000E00000000000000000000000000001B0000000000000000000000030000', 0
file = open("ozi.wpt","w")
file.write('OziExplorer Waypoint File Version 1.0\nWGS 84\nReserved 2\nReserved 3\n')
try:
_for cid in range(65536)[1:65536]:
__b = hex(rnc*65536+cid)[2:].zfill(8) + hex(lac)[2:].zfill(8)
__c = hex(divmod(net,100)[1])[2:].zfill(8) + hex(divmod(net,100)[0])[2:].zfill(8)
__string = (a + b + c + 'FFFFFFFF00000000').decode('hex')
__data = urllib2.urlopen('http://www.google.com/glm/mmap',string)
__r = data.read().encode('hex')
__if len(r) > 14 and int(r[22:23],16)==0 :
___x, y, i = float(int(r[14:22],16))/1000000, float(int(r[22:30],16))/1000000, i+1
___print cid, '-', x, y
___file.write('%d, %d, %f, %f\n' % (i, cid, x, y))
except:
_print 'connect error'
file.close()
Хотелось бы, конечно, поддержку списка прокси, чтобы после смерти одной подхватывалась вторая и скан продолжался, но, к сожалению, это за пределами моих возможностей.
-
- Гость
- Сообщения: 2
- Зарегистрирован: Пт, 26-06-2009, 00:59
[quote="dzr_gregory"]Для всех, кому это может быть интересно, прилагаю 2 функции на Delphi, которые по заданным параметрам получают координаты с сервиса Google и Yandex соответственно.
PS: использовалась библиотека Indy 10 (Delphi 2007).
По всем вопросам пишите в личку.
PS: использовалась библиотека Indy 10 (Delphi 2007).
По всем вопросам пишите в личку.
Код: Выделить всё
function GetCoordFromGoogle(CountryCode, NetworkCode, LAC, CellID: Integer): string;
var
strA, strB, strC, strAll: string;
sResult: string;
ms: TMemoryStream;
dLat, dLon: Double;
iLat, iLon: Integer;
i: Integer;
b: byte;
sTmp, sTmp2: string;
iCntr: Integer;
HTTP: TIdHTTP;
begin
Result := '';
strA := '000E00000000000000000000000000001B0000000000000000000000030000';
strB := '0000' + IntToHex(CellID, 2) + '0000' + IntToHex(LAC, 2);
strC := '000000' + IntToHex(NetworkCode, 2) + '000000' + IntToHex(CountryCode, 2);
strAll := strA + strB + strC + 'FFFFFFFF00000000';
HTTP := TIdHTTP.Create(nil);
HTTP.Request.ContentType := 'application/x-www-form-urlencoded';
HTTP.Request.ContentLength := Length(strAll) div 2;
ms := TMemoryStream.Create;
try
iCntr := 1;
for i := 1 to (Length(strAll) div 2) do begin
b := StrToInt('0x' + Copy(strAll, iCntr, 2));
iCntr := iCntr + 2;
ms.Write(b, 1);
end;
ms.Seek(0, soFromBeginning);
try
sResult := HTTP.Post('http://www.google.com/glm/mmap', ms);
if Length(sResult) > 14 then begin
sTmp := '0x';
for i := 1 to 5 do begin
sTmp2 := Copy(sResult, i + 6, 1);
sTmp := sTmp + IntToHex(Ord(sTmp2[1]), 2);
end;
iLat := StrToInt(sTmp);
sTmp := '0x';
for i := 1 to 4 do begin
sTmp2 := Copy(sResult, i + 11, 1);
sTmp := sTmp + IntToHex(Ord(sTmp2[1]), 2);
end;
iLon := StrToInt(sTmp);
dLat := iLat/1000000;
dLon := iLon/1000000;
Result := Format('%12.7f%s%12.7f', [dLat, #13#10, dLon]);
end;
except
// stub
end;
finally
HTTP.Free;
ms.Free;
end;
end;
**********************************
zdrastvuite,
vi ne podskajite kak mojna vidat resultat etoi funqcii "GetCoordFromGoogle(CountryCode, NetworkCode, LAC, CellID: Integer): string;" v TMemo,TStrings ili TEdit.
spasibo!
-
- Гость
- Сообщения: 2
- Зарегистрирован: Пт, 26-06-2009, 00:59
[quote="dzr_gregory"]Для всех, кому это может быть интересно, прилагаю 2 функции на Delphi, которые по заданным параметрам получают координаты с сервиса Google и Yandex соответственно.
PS: использовалась библиотека Indy 10 (Delphi 2007).
По всем вопросам пишите в личку.
PS: использовалась библиотека Indy 10 (Delphi 2007).
По всем вопросам пишите в личку.
Код: Выделить всё
function GetCoordFromGoogle(CountryCode, NetworkCode, LAC, CellID: Integer): string;
var
strA, strB, strC, strAll: string;
sResult: string;
ms: TMemoryStream;
dLat, dLon: Double;
iLat, iLon: Integer;
i: Integer;
b: byte;
sTmp, sTmp2: string;
iCntr: Integer;
HTTP: TIdHTTP;
begin
Result := '';
strA := '000E00000000000000000000000000001B0000000000000000000000030000';
strB := '0000' + IntToHex(CellID, 2) + '0000' + IntToHex(LAC, 2);
strC := '000000' + IntToHex(NetworkCode, 2) + '000000' + IntToHex(CountryCode, 2);
strAll := strA + strB + strC + 'FFFFFFFF00000000';
HTTP := TIdHTTP.Create(nil);
HTTP.Request.ContentType := 'application/x-www-form-urlencoded';
HTTP.Request.ContentLength := Length(strAll) div 2;
ms := TMemoryStream.Create;
try
iCntr := 1;
for i := 1 to (Length(strAll) div 2) do begin
b := StrToInt('0x' + Copy(strAll, iCntr, 2));
iCntr := iCntr + 2;
ms.Write(b, 1);
end;
ms.Seek(0, soFromBeginning);
try
sResult := HTTP.Post('http://www.google.com/glm/mmap', ms);
if Length(sResult) > 14 then begin
sTmp := '0x';
for i := 1 to 5 do begin
sTmp2 := Copy(sResult, i + 6, 1);
sTmp := sTmp + IntToHex(Ord(sTmp2[1]), 2);
end;
iLat := StrToInt(sTmp);
sTmp := '0x';
for i := 1 to 4 do begin
sTmp2 := Copy(sResult, i + 11, 1);
sTmp := sTmp + IntToHex(Ord(sTmp2[1]), 2);
end;
iLon := StrToInt(sTmp);
dLat := iLat/1000000;
dLon := iLon/1000000;
Result := Format('%12.7f%s%12.7f', [dLat, #13#10, dLon]);
end;
except
// stub
end;
finally
HTTP.Free;
ms.Free;
end;
end;
**********************************
zdrastvuite,
vi ne podskajite kak mojna vidat resultat etoi funqcii "GetCoordFromGoogle(CountryCode, NetworkCode, LAC, CellID: Integer): string;" v TMemo,TStrings ili TEdit.
spasibo!
-
- Известный нетмониторщик
- Сообщения: 469
- Зарегистрирован: Пн, 02-02-2004, 21:46
- Откуда: Ростов на Дону
- Нетмонитор: Siemens S35
- Контактная информация:
-
- Известный нетмониторщик
- Сообщения: 469
- Зарегистрирован: Пн, 02-02-2004, 21:46
- Откуда: Ростов на Дону
- Нетмонитор: Siemens S35
- Контактная информация:
Код: Выделить всё
# -*- coding: cp1251 -*-
operatorid = 02
countrycode = 250
i = 0
import urllib2,sys,datetime
#proxy = "92.207.45.14:8080"
#proxy = "127.0.0.1:3128"
#proxy = urllib2.ProxyHandler({"http" : proxy})
#opener = urllib2.build_opener(proxy)
#urllib2.install_opener(opener)
now = datetime.datetime.now()
now_s = str(now.year).zfill(4) + "-" + str(now.month).zfill(2) + "-" + str(now.day).zfill(2) + "_" + str(now.hour).zfill(2) + "-" + str(now.minute).zfill(2) + "-" + str(now.second).zfill(2) + ".wpt"
file = open(now_s,"w")
file.write('OziExplorer Waypoint File Version 1.0\nWGS 84\nReserved 2\nReserved 3\n')
for cellid in range(601,607)[1:65537]:
# полный список 900 for cellid in range(1,4)+range(1001,1004)+range(2001,2004)+range(3001,3004)+range(4001,4004)+range(5001,5004)+range(6001,6004)+range(7001,7004)+range(8001,8004)+range(9001,9004)+range(10001,10004)+range(11001,11004)+range(12001,12004)+range(13001,13004)+range(14001,14004)+range(15001,15004)+range(16001,16004)+range(17001,17004)+range(18001,18004)+range(19001,19004)+range(20001,20004)+range(21001,21004)+range(22001,22004)+range(23001,23004)+range(24001,24004)+range(25001,25004)+range(26001,26004)+range(27001,27004)+range(28001,28004)+range(29001,29004)+range(30001,30004)+range(31001,31004)+range(32001,32004)+range(33001,33004)+range(34001,34004)+range(35001,35004)+range(36001,36004)+range(37001,37004)+range(38001,38004)+range(39001,39004)+range(40001,40004)+range(41001,41004)+range(42001,42004)+range(43001,43004)+range(44001,44004)+range(45001,45004)+range(46001,46004)+range(47001,47004)+range(48001,48004)+range(49001,49004)+range(50001,50004)+range(51001,51004)+range(52001,52004)+range(53001,53004)+range(54001,54004)+range(55001,55004)+range(56001,56004)+range(57001,57004)+range(58001,58004)+range(59001,59004)+range(60001,60004)+range(51001,51004)+range(52001,52004)+range(53001,53004)+range(54001,54004)+range(55001,55004)+range(56001,56004)+range(57001,57004)+range(58001,58004)+range(59001,59004)+range(60001,60004)+range(61001,61004)+range(62001,62004)+range(63001,63004)+range(64001,64004)+range(65001,65004)[1:65537]:
print ('-', cellid)
for lac in range(65537)[6107:6108]:
try:
data = urllib2.urlopen('http://mobile.maps.yandex.net/cellid_location/?&cellid='+str(cellid)+'&operatorid='+str(operatorid)+'&countrycode='+str(countrycode)+'&lac='+str(lac))
r = data.read()
# r = '<?xml version="1.0" encoding="UTF-8"?><location><coordinates latitude="47.2439194" longitude="39.5267181" nlatitude="47.2376213" nlongitude="39.5359650" /></location>'
if r.find('No cell found')<>16:
i0,i1,i2 = r.index( 'coordinates latitude="'), r.index( '" longitude="'), r.index( '" nlatitude="')
lat = float(r[i0+22:i1])
lon = float(r[i1+13:i2])
i = i+1
print (lac, cellid, '-',lat ,lon, r)
file.write('%d, %d-%d, %f, %f\n' % (i, lac, cellid, lat ,lon))
else:
print ('-', lac, cellid, '- no data in yandex')
except:
print ('connect error', lac, cellid)
file.close()
-
- Известный нетмониторщик
- Сообщения: 469
- Зарегистрирован: Пн, 02-02-2004, 21:46
- Откуда: Ростов на Дону
- Нетмонитор: Siemens S35
- Контактная информация:
Код: Выделить всё
# -*- coding: cp1251 -*-
operatorid = 02
countrycode = 250
a = '000E00000000000000000000000000001B0000000000000000000000030000'
net = countrycode*100+operatorid
i, count_error = 0,0
import urllib2,sys,datetime
now = datetime.datetime.now()
now_s = str(now.year).zfill(4) + "-" + str(now.month).zfill(2) + "-" + str(now.day).zfill(2) + "_" + str(now.hour).zfill(2) + "-" + str(now.minute).zfill(2) + "-" + str(now.second).zfill(2) + ".csv"
file = open(now_s,"w")
#file.write('OziExplorer Waypoint File Version 1.0\nWGS 84\nReserved 2\nReserved 3\n')
for cid in range(500,2500)[0:]:
print ('-', cid)
for lac in range(65537)[2600:2660]:
b = hex(cid)[2:].zfill(8) + hex(lac)[2:].zfill(8)
c = hex(divmod(net,100)[1])[2:].zfill(8) + hex(divmod(net,100)[0])[2:].zfill(8)
string = (a + b + c + 'FFFFFFFF00000000').decode('hex')
try:
data = urllib2.urlopen('http://www.google.com/glm/mmap',string)
now = datetime.datetime.now()
now_s = str(now.year).zfill(4) + "." + str(now.month).zfill(2) + "." + str(now.day).zfill(2) + " " + str(now.hour).zfill(2) + ":" + str(now.minute).zfill(2) + ":" + str(now.second).zfill(2)
r = data.read().encode('hex')
if len(r) > 14:
count_error = 0
lat = float(int(r[14:22],16))/1000000
if (lat > 360):
lat = lat - 2^32/1000000
lon = float(int(r[22:30],16))/1000000
if (lon > 360):
lon = lon - 2^32/1000000
r1 = int(r[30:38],16)
r2 = int(r[38:46],16)
print lat, lon, r1, r2
file.write('%s, %d, %d, %d, %f, %f, %d, %d\n' % (now_s, countrycode*100+operatorid, lac, cid, lat, lon, r1, r2))
# file.write('%d, %d-%d, %f, %f\n' % (i, lac, cid, lat ,lon))
else:
print ('-', lac, cid, '- no data in gogle')
except:
print 'no data in google'
count_error = count_error+1
if(count_error > 20):
break
file.close()
- stepan39
- Нетмониторщик
- Сообщения: 36
- Зарегистрирован: Пт, 09-05-2008, 22:44
- Откуда: Калининград
- Нетмонитор: SE K750i
- Контактная информация:
То, что надо. 5 с ++++++Netlog писал(а): По просьбам трудящихся в личной почте привожу здесь ту версию гугловского скрипта, которая выдаёт данные в том формате, что мне симпатичен. Формат Ozi-wpt тоже есть, правда, он закомментирован решёточками #
Нетмониторинг в Калининградской области
http://stepan39.ucoz.ru/
http://stepan39.ucoz.ru/
-
- Известный нетмониторщик
- Сообщения: 469
- Зарегистрирован: Пн, 02-02-2004, 21:46
- Откуда: Ростов на Дону
- Нетмонитор: Siemens S35
- Контактная информация:
-
- Начинающий нетмониторщик
- Сообщения: 6
- Зарегистрирован: Пн, 13-04-2009, 14:42
Это больше всего похоже на правду. такой же сервис есть у яндеск марс, если к нему вдруг подключить жпс, то приложение спросит разрешение на то что бы передавать данные с трубы на сервер для сбора данных. так же поступает и нокиа мапс, только возможно без разрешенияDenis Insane писал(а):В соседних темах обсуждали это и пришли к выводу, что гугл брал эти данные из трубок абонентов Т.е. при использовании GoogleMaps на мобильном телефоне с GPS передавал на сервер данные о координатах трубки вместе с CellID базовой (может еще с какими параметрами), собирал базу данных, которую сейчас использует для определения координат.SIYGAL_2 писал(а):Вне всякого сомнения положение определяет по cid'у. Причем google знает координаты сайтов и азимуты секторов, дальше отсчитывает используя вероятно TA и может быть RXlev.
Вопрос: Какая еще шарага кроме опсоса имеет доступ к вышеназванным данным? Эти забугорные ребята должны ведь все-таки откуда-то этой информацией владеть.
-
- Известный нетмониторщик
- Сообщения: 637
- Зарегистрирован: Вс, 29-05-2005, 13:44
- Откуда: Московская область
- Нетмонитор: HTC Artemis, Nokia 6600 (CellTrack+FTD)
-
- Известный нетмониторщик
- Сообщения: 469
- Зарегистрирован: Пн, 02-02-2004, 21:46
- Откуда: Ростов на Дону
- Нетмонитор: Siemens S35
- Контактная информация:
-
- Нетмониторщик
- Сообщения: 32
- Зарегистрирован: Чт, 14-12-2006, 11:50
- Нетмонитор: Nokia 6120
-
- Известный нетмониторщик
- Сообщения: 469
- Зарегистрирован: Пн, 02-02-2004, 21:46
- Откуда: Ростов на Дону
- Нетмонитор: Siemens S35
- Контактная информация:
Код: Выделить всё
# -*- coding: cp1251 -*-
i,error_count, miss_count = 0,0,0
countrycode, operatorid = 250,02
lac_min,lac_max = 6100,6120
cid_min, cid_max = 43211,65536
import urllib2,sys,datetime
#proxy = "92.207.45.14:8080"
#proxy = "127.0.0.1:3128"
#proxy = urllib2.ProxyHandler({"http" : proxy})
#opener = urllib2.build_opener(proxy)
#urllib2.install_opener(opener)
class ProxyPasswordMgr:
def __init__(self):
self.user = self.passwd = None
def add_password(self, realm, uri, user, passwd):
self.user = user
self.passwd = passwd
def find_user_password(self, realm, authuri):
return self.user, self.passwd
proxy = "192.168.3.1:3128"
user = "doroshev"
password = "fapoffoa2"
proxy = urllib2.ProxyHandler({"http" : proxy})
proxy_auth_handler = urllib2.ProxyBasicAuthHandler(ProxyPasswordMgr())
proxy_auth_handler.add_password(None, None, user, password)
opener = urllib2.build_opener(proxy, proxy_auth_handler)
urllib2.install_opener(opener)
now = datetime.datetime.now()
now_s = str(now.year).zfill(4) + "-" + str(now.month).zfill(2) + "-" + str(now.day).zfill(2) + "_" + str(now.hour).zfill(2) + "-" + str(now.minute).zfill(2) + "-" + str(now.second).zfill(2) + ".wpt"
wpt = open(now_s,"w")
wpt.write('OziExplorer Waypoint File Version 1.0\nWGS 84\nReserved 2\nReserved 3\n')
try:
log_cell_ya = open('log_cell_ya.csv',"r+")
log_cell_ya.seek(0,2)
except:
log_cell_ya = open('log_cell_ya.csv',"w")
try:
log_empty_ya = open('log_empty_ya.csv',"r+")
log_empty_ya.seek(0,2)
except:
log_empty_ya = open('log_empty_ya.csv',"w")
try:
log_error_ya = open('log_error_ya.csv',"r+")
log_error_ya.seek(0,2)
except:
log_error_ya = open('log_error_ya.csv',"w")
for cid in range(cid_min,cid_max)[0:]:
if divmod(cid,10)[1] in (1,2,3,4,5,6):
print ('-', cid)
for lac in range(65537)[lac_min:lac_max]:
now = datetime.datetime.now()
now_s = str(now.year).zfill(4) + "." + str(now.month).zfill(2) + "." + str(now.day).zfill(2) + " " + str(now.hour).zfill(2) + ":" + str(now.minute).zfill(2) + ":" + str(now.second).zfill(2)
try:
data = urllib2.urlopen('http://mobile.maps.yandex.net/cellid_location/?&cellid='+str(cid)+'&operatorid='+str(operatorid)+'&countrycode='+str(countrycode)+'&lac='+str(lac))
# http://mobile.maps.yandex.net/cellid_location/?&cellid= 4011 &operatorid= 2 &countrycode= 250 &lac= 6100
r = data.read()
# r = '<?xml version="1.0" encoding="UTF-8"?><location><coordinates latitude="47.2439194" longitude="39.5267181" nlatitude="47.2376213" nlongitude="39.5359650" /></location>'
if r.find('No cell ')<>16:
i0,i1,i2,i3,i4 = r.index( 'coordinates latitude="'), r.index( '" longitude="'), r.index( '" nlatitude="'), r.index( '" nlongitude="'), r.index( '" /></location>')
lat = float(r[i0+22:i1])
lon = float(r[i1+13:i2])
nlat = float(r[i2+14:i3])
nlon = float(r[i3+14:i4])
i = i+1
if divmod(i,100)[1] == 0:
wpt.flush()
log_cell_ya.flush()
log_empty_ya.flush()
log_error_ya.flush()
error_count, miss_count = 0,0
print (lac, cid, '-',lat ,lon)
wpt.write('%d, %d-%d-%d, %f, %f\n' % (i, countrycode*100+operatorid, lac, cid, lat ,lon))
log_cell_ya.write('%s, %d, %d, %d, %f, %f, %f, %f\n' % (now_s, countrycode*100+operatorid, lac, cid, lat ,lon, nlat, nlon))
else:
print ('-', lac, cid, '- no data in yandex')
log_empty_ya.write('%s, %d, %d, %d\n' % (now_s, countrycode*100+operatorid, lac, cid))
miss_count = miss_count + 1
except:
print ('connect error', lac, cid)
log_error_ya.write('%s, %d, %d, %d\n' % (now_s, countrycode*100+operatorid, lac, cid))
error_count = error_count+1
if ((error_count > 20) or (miss_count > 20000)): break
if ((error_count > 20) or (miss_count > 20000)): break
wpt.close()
log_cell_ya.close()
log_empty_ya.close()
log_error_ya.close()