Google maps для Symbian, база данных Cell ID в GoogleNetmonitor GSM/UMTS: от телефонов до измерительных комплексов

Ответить
@chiles
Гость
Сообщения: 1
Зарегистрирован: Пт, 15-05-2009, 09:40
Откуда: Chelyabinsk
Нетмонитор: SE S500

Очень нужна помощь!!!

Сообщение @chiles »

Здравствуйте, помогите пожалуйста, я думаю если кто-нибудь ответит это будет полезно для новичков.
Проблема такая, из всего предложенного мне ничего не подошло. Скрипты на питоне и делфи - я эти языки вообще не знаю, программа Мобильные карты (МСК) - она координаты не собирает, какие-то непонятные значения типа 1001 37001 (1, 2, 3, 5, 6, 7), как с этим работать хз. Кому не лень и кто знает, выложите код на ПХП или на Си, хоть бы опишите какой запрос нужно сформировать к Гугл/Яндекс.

Спасибо.
Netlog
Известный нетмониторщик
Сообщения: 469
Зарегистрирован: Пн, 02-02-2004, 21:46
Откуда: Ростов на Дону
Нетмонитор: Siemens S35
Контактная информация:

Сообщение Netlog »

Чем Питон то не нравится?
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

скрипт + прокси

Сообщение h1-tek_deamon »

Невнимательно читал форум, в результате попал в бан у Гугла за скан широких диапазонов. Сдаваться не в моих правилах, потому решил поискать варианты работы через прокси. С экзешниками было просто: соксификация плюс туннель на 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()

Хотелось бы, конечно, поддержку списка прокси, чтобы после смерти одной подхватывалась вторая и скан продолжался, но, к сожалению, это за пределами моих возможностей.
giorgi2000
Гость
Сообщения: 2
Зарегистрирован: Пт, 26-06-2009, 00:59

Сообщение giorgi2000 »

[quote="dzr_gregory"]Для всех, кому это может быть интересно, прилагаю 2 функции на Delphi, которые по заданным параметрам получают координаты с сервиса Google и Yandex соответственно.

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!
giorgi2000
Гость
Сообщения: 2
Зарегистрирован: Пт, 26-06-2009, 00:59

Сообщение giorgi2000 »

[quote="dzr_gregory"]Для всех, кому это может быть интересно, прилагаю 2 функции на Delphi, которые по заданным параметрам получают координаты с сервиса Google и Yandex соответственно.

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!
Netlog
Известный нетмониторщик
Сообщения: 469
Зарегистрирован: Пн, 02-02-2004, 21:46
Откуда: Ростов на Дону
Нетмонитор: Siemens S35
Контактная информация:

Сообщение Netlog »

Хормат запроса к Яндексу можно где-либо посмотреть? а то на гугле забанили :)
Netlog
Известный нетмониторщик
Сообщения: 469
Зарегистрирован: Пн, 02-02-2004, 21:46
Откуда: Ростов на Дону
Нетмонитор: Siemens S35
Контактная информация:

Сообщение Netlog »

Код: Выделить всё

# -*- 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&#40;'No cell found'&#41;<>16&#58;
      i0,i1,i2 = r.index&#40; 'coordinates latitude="'&#41;, r.index&#40; '" longitude="'&#41;, r.index&#40; '"  nlatitude="'&#41;
      lat = float&#40;r&#91;i0+22&#58;i1&#93;&#41;
      lon = float&#40;r&#91;i1+13&#58;i2&#93;&#41;
      i = i+1
      print &#40;lac, cellid, '-',lat ,lon, r&#41;
      file.write&#40;'%d, %d-%d, %f, %f\n' % &#40;i, lac, cellid, lat ,lon&#41;&#41;
    else&#58; 
     print &#40;'-', lac, cellid, '- no data in yandex'&#41;
   except&#58; 
    print &#40;'connect error', lac, cellid&#41;

file.close&#40;&#41;
что-то вот-такое для Яндекса годится
Netlog
Известный нетмониторщик
Сообщения: 469
Зарегистрирован: Пн, 02-02-2004, 21:46
Откуда: Ростов на Дону
Нетмонитор: Siemens S35
Контактная информация:

Сообщение Netlog »

Код: Выделить всё

# -*- coding&#58; cp1251 -*-
operatorid = 02
countrycode = 250
a = '000E00000000000000000000000000001B0000000000000000000000030000'
net = countrycode*100+operatorid
i, count_error = 0,0

import urllib2,sys,datetime

now = datetime.datetime.now&#40;&#41;
now_s = str&#40;now.year&#41;.zfill&#40;4&#41; + "-" + str&#40;now.month&#41;.zfill&#40;2&#41; + "-" + str&#40;now.day&#41;.zfill&#40;2&#41; + "_" + str&#40;now.hour&#41;.zfill&#40;2&#41; + "-" + str&#40;now.minute&#41;.zfill&#40;2&#41; + "-" + str&#40;now.second&#41;.zfill&#40;2&#41; + ".csv"
file = open&#40;now_s,"w"&#41;
#file.write&#40;'OziExplorer Waypoint File Version 1.0\nWGS 84\nReserved 2\nReserved 3\n'&#41; 

for cid in range&#40;500,2500&#41;&#91;0&#58;&#93;&#58;
  print &#40;'-', cid&#41;
  for lac in range&#40;65537&#41;&#91;2600&#58;2660&#93;&#58;   
   b = hex&#40;cid&#41;&#91;2&#58;&#93;.zfill&#40;8&#41; + hex&#40;lac&#41;&#91;2&#58;&#93;.zfill&#40;8&#41;
   c = hex&#40;divmod&#40;net,100&#41;&#91;1&#93;&#41;&#91;2&#58;&#93;.zfill&#40;8&#41; + hex&#40;divmod&#40;net,100&#41;&#91;0&#93;&#41;&#91;2&#58;&#93;.zfill&#40;8&#41;
   string = &#40;a + b + c + 'FFFFFFFF00000000'&#41;.decode&#40;'hex'&#41;
   try&#58;
    data = urllib2.urlopen&#40;'http&#58;//www.google.com/glm/mmap',string&#41;
    now = datetime.datetime.now&#40;&#41;
    now_s = str&#40;now.year&#41;.zfill&#40;4&#41; + "." + str&#40;now.month&#41;.zfill&#40;2&#41; + "." + str&#40;now.day&#41;.zfill&#40;2&#41; + " " + str&#40;now.hour&#41;.zfill&#40;2&#41; + "&#58;" + str&#40;now.minute&#41;.zfill&#40;2&#41; + "&#58;" + str&#40;now.second&#41;.zfill&#40;2&#41;
    r = data.read&#40;&#41;.encode&#40;'hex'&#41;
    if len&#40;r&#41; > 14&#58;
     count_error = 0
     lat = float&#40;int&#40;r&#91;14&#58;22&#93;,16&#41;&#41;/1000000
     if &#40;lat > 360&#41;&#58;
      lat = lat - 2^32/1000000
     lon = float&#40;int&#40;r&#91;22&#58;30&#93;,16&#41;&#41;/1000000
     if &#40;lon > 360&#41;&#58;
      lon = lon - 2^32/1000000
     r1 = int&#40;r&#91;30&#58;38&#93;,16&#41;
     r2 = int&#40;r&#91;38&#58;46&#93;,16&#41;
     print lat, lon, r1, r2
     file.write&#40;'%s, %d, %d, %d, %f, %f, %d, %d\n' % &#40;now_s, countrycode*100+operatorid, lac, cid, lat, lon, r1, r2&#41;&#41;
#     file.write&#40;'%d, %d-%d, %f, %f\n' % &#40;i, lac, cid, lat ,lon&#41;&#41; 

    else&#58;
     print &#40;'-', lac, cid, '- no data in gogle'&#41;
   except&#58;
    print 'no data in google'
    count_error = count_error+1
  if&#40;count_error > 20&#41;&#58;
    break
file.close&#40;&#41;
По просьбам трудящихся в личной почте привожу здесь ту версию гугловского скрипта, которая выдаёт данные в том формате, что мне симпатичен. Формат Ozi-wpt тоже есть, правда, он закомментирован решёточками #
Аватара пользователя
stepan39
Нетмониторщик
Сообщения: 36
Зарегистрирован: Пт, 09-05-2008, 22:44
Откуда: Калининград
Нетмонитор: SE K750i
Контактная информация:

Сообщение stepan39 »

Netlog писал(а): По просьбам трудящихся в личной почте привожу здесь ту версию гугловского скрипта, которая выдаёт данные в том формате, что мне симпатичен. Формат Ozi-wpt тоже есть, правда, он закомментирован решёточками #
То, что надо. 5 с ++++++
Нетмониторинг в Калининградской области
http://stepan39.ucoz.ru/
Netlog
Известный нетмониторщик
Сообщения: 469
Зарегистрирован: Пн, 02-02-2004, 21:46
Откуда: Ростов на Дону
Нетмонитор: Siemens S35
Контактная информация:

Сообщение Netlog »

найдена ошибка,
2^32
в питоне не работает, надо писать
2**32
Shurkis
Начинающий нетмониторщик
Сообщения: 6
Зарегистрирован: Пн, 13-04-2009, 14:42

Сообщение Shurkis »

Denis Insane писал(а):
SIYGAL_2 писал(а):Вне всякого сомнения положение определяет по cid'у. Причем google знает координаты сайтов и азимуты секторов, дальше отсчитывает используя вероятно TA и может быть RXlev.
Вопрос: Какая еще шарага кроме опсоса имеет доступ к вышеназванным данным? Эти забугорные ребята должны ведь все-таки откуда-то этой информацией владеть.
В соседних темах обсуждали это и пришли к выводу, что гугл брал эти данные из трубок абонентов :) Т.е. при использовании GoogleMaps на мобильном телефоне с GPS передавал на сервер данные о координатах трубки вместе с CellID базовой (может еще с какими параметрами), собирал базу данных, которую сейчас использует для определения координат.
Это больше всего похоже на правду. такой же сервис есть у яндеск марс, если к нему вдруг подключить жпс, то приложение спросит разрешение на то что бы передавать данные с трубы на сервер для сбора данных. так же поступает и нокиа мапс, только возможно без разрешения
McMaster
Известный нетмониторщик
Сообщения: 637
Зарегистрирован: Вс, 29-05-2005, 13:44
Откуда: Московская область
Нетмонитор: HTC Artemis, Nokia 6600 (CellTrack+FTD)

Сообщение McMaster »

Уважаемый Netlog, а как к скрипту прикрутить прокси?
Netlog
Известный нетмониторщик
Сообщения: 469
Зарегистрирован: Пн, 02-02-2004, 21:46
Откуда: Ростов на Дону
Нетмонитор: Siemens S35
Контактная информация:

Сообщение Netlog »

Для беспарольного прокси тут уже были варианты.
Через час-два с работы выложу скрипт с подключением к прокси с аутентификацией.
kazaros
Нетмониторщик
Сообщения: 32
Зарегистрирован: Чт, 14-12-2006, 11:50
Нетмонитор: Nokia 6120

Сообщение kazaros »

здравствуйте) поставил себе и питон и мск, московский мегафон вытаскивают из гугла как положено, а вводил сид и лак мтс и мегафон питера...нет данных...
Netlog
Известный нетмониторщик
Сообщения: 469
Зарегистрирован: Пн, 02-02-2004, 21:46
Откуда: Ростов на Дону
Нетмонитор: Siemens S35
Контактная информация:

Сообщение Netlog »

Код: Выделить всё

# -*- coding&#58; 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&#58;8080"
#proxy = "127.0.0.1&#58;3128"
#proxy = urllib2.ProxyHandler&#40;&#123;"http" &#58; proxy&#125;&#41; 
#opener = urllib2.build_opener&#40;proxy&#41; 
#urllib2.install_opener&#40;opener&#41;

class ProxyPasswordMgr&#58;
    def __init__&#40;self&#41;&#58;
        self.user = self.passwd = None
    def add_password&#40;self, realm, uri, user, passwd&#41;&#58;
        self.user = user
        self.passwd = passwd
    def find_user_password&#40;self, realm, authuri&#41;&#58;
        return self.user, self.passwd

proxy = "192.168.3.1&#58;3128"
user = "doroshev"
password = "fapoffoa2"

proxy = urllib2.ProxyHandler&#40;&#123;"http" &#58; proxy&#125;&#41;
proxy_auth_handler = urllib2.ProxyBasicAuthHandler&#40;ProxyPasswordMgr&#40;&#41;&#41;
proxy_auth_handler.add_password&#40;None, None, user, password&#41;
opener = urllib2.build_opener&#40;proxy, proxy_auth_handler&#41;
urllib2.install_opener&#40;opener&#41;

now = datetime.datetime.now&#40;&#41; 
now_s = str&#40;now.year&#41;.zfill&#40;4&#41; + "-" + str&#40;now.month&#41;.zfill&#40;2&#41; + "-" + str&#40;now.day&#41;.zfill&#40;2&#41; + "_" + str&#40;now.hour&#41;.zfill&#40;2&#41; + "-" + str&#40;now.minute&#41;.zfill&#40;2&#41; + "-" + str&#40;now.second&#41;.zfill&#40;2&#41; + ".wpt" 
wpt = open&#40;now_s,"w"&#41; 
wpt.write&#40;'OziExplorer Waypoint File Version 1.0\nWGS 84\nReserved 2\nReserved 3\n'&#41; 
try&#58;
  log_cell_ya = open&#40;'log_cell_ya.csv',"r+"&#41;
  log_cell_ya.seek&#40;0,2&#41;
except&#58;
  log_cell_ya = open&#40;'log_cell_ya.csv',"w"&#41;
try&#58;
  log_empty_ya = open&#40;'log_empty_ya.csv',"r+"&#41;
  log_empty_ya.seek&#40;0,2&#41;
except&#58;
  log_empty_ya = open&#40;'log_empty_ya.csv',"w"&#41;
try&#58;    
  log_error_ya = open&#40;'log_error_ya.csv',"r+"&#41;
  log_error_ya.seek&#40;0,2&#41;
except&#58;
  log_error_ya = open&#40;'log_error_ya.csv',"w"&#41;
for cid in range&#40;cid_min,cid_max&#41;&#91;0&#58;&#93;&#58;
 if divmod&#40;cid,10&#41;&#91;1&#93; in &#40;1,2,3,4,5,6&#41;&#58;  
  print &#40;'-', cid&#41; 
  for lac in range&#40;65537&#41;&#91;lac_min&#58;lac_max&#93;&#58;    
   now = datetime.datetime.now&#40;&#41; 
   now_s = str&#40;now.year&#41;.zfill&#40;4&#41; + "." + str&#40;now.month&#41;.zfill&#40;2&#41; + "." + str&#40;now.day&#41;.zfill&#40;2&#41; + " " + str&#40;now.hour&#41;.zfill&#40;2&#41; + "&#58;" + str&#40;now.minute&#41;.zfill&#40;2&#41; + "&#58;" + str&#40;now.second&#41;.zfill&#40;2&#41; 
   try&#58; 
    data = urllib2.urlopen&#40;'http&#58;//mobile.maps.yandex.net/cellid_location/?&cellid='+str&#40;cid&#41;+'&operatorid='+str&#40;operatorid&#41;+'&countrycode='+str&#40;countrycode&#41;+'&lac='+str&#40;lac&#41;&#41;
#                           http&#58;//mobile.maps.yandex.net/cellid_location/?&cellid=         4011  &operatorid=               2   &countrycode=               250  &lac=     6100 
    r = data.read&#40;&#41; 
#    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&#40;'No cell '&#41;<>16&#58; 
      i0,i1,i2,i3,i4 = r.index&#40; 'coordinates latitude="'&#41;, r.index&#40; '" longitude="'&#41;, r.index&#40; '"  nlatitude="'&#41;, r.index&#40; '" nlongitude="'&#41;, r.index&#40; '" /></location>'&#41;
      lat = float&#40;r&#91;i0+22&#58;i1&#93;&#41; 
      lon = float&#40;r&#91;i1+13&#58;i2&#93;&#41; 
      nlat = float&#40;r&#91;i2+14&#58;i3&#93;&#41;      
      nlon = float&#40;r&#91;i3+14&#58;i4&#93;&#41; 
      i = i+1
      if divmod&#40;i,100&#41;&#91;1&#93; == 0&#58;
        wpt.flush&#40;&#41;
        log_cell_ya.flush&#40;&#41;
        log_empty_ya.flush&#40;&#41;
        log_error_ya.flush&#40;&#41;        
      error_count, miss_count = 0,0
      print &#40;lac, cid, '-',lat ,lon&#41; 
      wpt.write&#40;'%d, %d-%d-%d, %f, %f\n' % &#40;i, countrycode*100+operatorid, lac, cid, lat ,lon&#41;&#41;
      log_cell_ya.write&#40;'%s, %d, %d, %d, %f, %f, %f, %f\n' % &#40;now_s, countrycode*100+operatorid, lac, cid, lat ,lon, nlat, nlon&#41;&#41;
    else&#58; 
      print &#40;'-', lac, cid, '- no data in yandex'&#41; 
      log_empty_ya.write&#40;'%s, %d, %d, %d\n' % &#40;now_s, countrycode*100+operatorid, lac, cid&#41;&#41;
      miss_count = miss_count + 1
   except&#58; 
     print &#40;'connect error', lac, cid&#41; 
     log_error_ya.write&#40;'%s, %d, %d, %d\n' % &#40;now_s, countrycode*100+operatorid, lac, cid&#41;&#41;
     error_count = error_count+1
   if &#40;&#40;error_count > 20&#41; or &#40;miss_count > 20000&#41;&#41;&#58; break
 if &#40;&#40;error_count > 20&#41; or &#40;miss_count > 20000&#41;&#41;&#58; break
wpt.close&#40;&#41;
log_cell_ya.close&#40;&#41;
log_empty_ya.close&#40;&#41;
log_error_ya.close&#40;&#41;
Ответить