Verileri nereden alıyor bu amcalar, bunun daha düzgünü de yapılabilir diyerek kayınçoyla oturup biraz (2 saatten uzun sürdü hepsi) inceledik. önce http://mobil.iett.gov.tr/ sayfasındaki otobüsüm nerede bağlantısını farkettik, herhalde buralardan alıyorlar verileri diye düşündük. Ama ayrıştırması çok zor bir veri gibi görünüyordu.
Toplanan dosyalar şu şekilde biriktiler:
Sonra asıl uygulamanın veriyi nasıl çektiğine bakalım dedik ve nasıl yapsak, nasıl yapsak diye düşünürken şöyle bir yöntem bulduk: Benim android telefonumu SSHTunnel ile bilgisayarım üzerinden proxy'ledik ve bilgisayarda wireshark ile trafiği izlerken "nerde bu otobüs"ü açtık hat listesi aldık, otobüs konumlarını aldık, şöyle bir gezindik. Uygulamanın arka tarafındaki servis düz HTTP olduğu için güzelce eriştiği bütün URL'leri alabildik.
Nerde bu Otobüs uygulamasının arka tarafı ASP ile yazılmış, zaten gelistiren cocuklar da Microsoft Student Partner'lar falan, benim tabirimle microsoft'çu çocuklar (maalesef M$ bu yetenekli gençleri daha okulları bitmeden kazanmış bile). Baktık uygulama verileri kendi sitelerinden http://nerdebuotobus.com/getLineBusses.aspx?line=19Z&points=1, http://nerdebuotobus.com/getLineStopSchedules.aspx?line=19B&stop=A1871&output=json gibi URL'ler ile çekiyor.
Sonra bu verilerin iett'nin mobil sitesinde bulduğumuzdan çok daha düzgün yapıya sahip olduğu sonucuna varıp başladık fikir yürütmeye. Kendi çapında uygulama geliştiren iki gencin İETT ile anlaşması olamaz, demek ki bu verileri İETT açıktan bir yerlerden sağlıyor dedik. Nedense çok sonra İETT'nin sitesinden de otobüs konumlarının sorgulanabildiğini hatırlayıp bir baktık ki İETT harita sayfalarını gezerken bir yandan firebug açıp izleyince İETT'nin harita arayüzünde gösterdiği verileri zaten javascript/ajax ile xml olarak çektiğini ve Nerde bu Otobüs'çü gençlerin de dolaylı olarak bu XML'i döndüğünü anladık. Hat kodları, duraklar, otobüs konumları falan İETT baştan beri bize sunmuş zaten XML olarak. Nerde bu Otobüs için bunu json'a dönüştüren bir şey yazmışlar anlaşılan, çünkü gelen veri yapısı aynı idi.
İETT'nin XML'leri ortadaydı ve kolayca erişilebilirdi: http://harita.iett.gov.tr/XML/34otog.xml
Benzer şekilde hat kodları, otobüs saatleri ve diğer veriler de başından beri elimizde varmış, boşuna kasmışız Nerde bu Otobüs ile uğraşarak.
İstediğimiz verilere erişebildiğimizi anladıktan sonra bu verilerin ne kadar güvenilir olduğuna geldi sıra, önce iki otobüs hattı için (metrobüs olan 34 ve karşıya sık giden 112'yi seçtim) cron'a bir şey yazayım bir gün sonra bakayım ne sıklıkta güncelleniyor diye biraz izleyeyim diyordum ama dün farkettim ki iki haftadır o cron'ları unutmuşum. Bu sayede sık seferi olan iki otobüs hattı için iki haftalık güncelleme verisi toplamış oldum.
İstediğimiz verilere erişebildiğimizi anladıktan sonra bu verilerin ne kadar güvenilir olduğuna geldi sıra, önce iki otobüs hattı için (metrobüs olan 34 ve karşıya sık giden 112'yi seçtim) cron'a bir şey yazayım bir gün sonra bakayım ne sıklıkta güncelleniyor diye biraz izleyeyim diyordum ama dün farkettim ki iki haftadır o cron'ları unutmuşum. Bu sayede sık seferi olan iki otobüs hattı için iki haftalık güncelleme verisi toplamış oldum.
Geçtiğimiz 13 günde 112 ve 34 hatları için 10 dakikaya bir ilgili xml'leri şöyle topladım:
bekir@hede:~$ crontab -e */10 * * * * cd /free/iett; wget --header='Referer: http://harita.iett.gov.tr/' http://harita.iett.gov.tr/XML/112otog.xml 5,15,25,35,45,55 * * * * cd /free/iett; wget --header='Referer: http://harita.iett.gov.tr/' http://harita.iett.gov.tr/XML/34otog.xml
Toplanan dosyalar şu şekilde biriktiler:
bekir@hede:/free/iett$ ls -lrt toplam 54328 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.9 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.8 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.7 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.6 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.5 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.4 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.3 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.2 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.15 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.14 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.13 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.12 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.11 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.10 -rw-r--r-- 1 bekir bekir 886 Nis 29 02:15 112otog.xml.1 ... -rw-r--r-- 1 bekir bekir 673 May 11 02:19 112otog.xml.1662 -rw-r--r-- 1 bekir bekir 673 May 11 02:19 112otog.xml.1661 -rw-r--r-- 1 bekir bekir 673 May 11 02:19 112otog.xml.1660 -rw-r--r-- 1 bekir bekir 673 May 11 02:19 112otog.xml.1659 -rw-r--r-- 1 bekir bekir 673 May 11 02:19 112otog.xml.1658 -rw-r--r-- 1 bekir bekir 673 May 11 02:19 112otog.xml.1657 -rw-r--r-- 1 bekir bekir 673 May 11 02:19 112otog.xml.1656 -rw-r--r-- 1 bekir bekir 673 May 11 02:19 112otog.xml.1655 -rw-r--r-- 1 bekir bekir 673 May 11 02:19 112otog.xml.1654 -rw-r--r-- 1 bekir bekir 1303 May 11 05:41 112otog.xml.1681 -rw-r--r-- 1 bekir bekir 1303 May 11 05:41 112otog.xml.1680 -rw-r--r-- 1 bekir bekir 1303 May 11 05:41 112otog.xml.1679 -rw-r--r-- 1 bekir bekir 1303 May 11 05:41 112otog.xml.1678 -rw-r--r-- 1 bekir bekir 1303 May 11 05:41 112otog.xml.1677 -rw-r--r-- 1 bekir bekir 1303 May 11 05:41 112otog.xml.1676 -rw-r--r-- 1 bekir bekir 1303 May 11 05:41 112otog.xml.1675 -rw-r--r-- 1 bekir bekir 16710 May 11 06:36 34otog.xml.1673 -rw-r--r-- 1 bekir bekir 16710 May 11 06:36 34otog.xml.1672 -rw-r--r-- 1 bekir bekir 16710 May 11 06:36 34otog.xml.1671 bekir@hede:/free/iett$
Sonra bu verileri inceleme faslına gelince farkettim ki 10 dakikaya bir durmadan aynı dosyaları almışım, örneğin yukarıda ilk 15 kadar istek sürekli aynı veriyi almış. Bunun anlamı o dosyanın 15*10=150 dakikadır güncellenmediği. Sonra ben de otobüs konumlarını içeren bu XML'lerin ne sıklıkta güncellendiğine bakmak için şunları yaptım, aşağıdaki çıktılar 34 ve 112 hatları için hangi saatte kaç GPS güncellemesi geldiğini gösteriyor.
bekir@hede:/free/iett$ ls 112* | wc -l 1682 bekir@hede:/free/iett$ ls -lrt 112* | cut -d. -f1,2 | sort -u | awk '{print $8" "$9}' | cut -d: -f1 | sort |uniq -c | sort -n | awk '{print $2, $1/13}' | sort 00 1.53846 01 1.46154 02 0.230769 05 0.384615 06 0.230769 07 1.07692 08 0.769231 09 1.38462 10 1.84615 11 2.07692 12 1.69231 13 1.23077 14 1.92308 15 2.15385 16 1.84615 17 2.07692 18 1.61538 19 2 2011 0.0769231 20 2 21 1.69231 22 2.23077 23 2 bekir@hede:/free/iett$ ls 34* | wc -l 1674 bekir@hede:/free/iett$ ls -lrt 34* | cut -d. -f1,2 | sort -u | awk '{print $8" "$9}' | cut -d: -f1 | sort |uniq -c | sort -n | awk '{print $2, $1/13}' | sort 00 3.92308 01 2.69231 02 1.07692 05 0.692308 06 0.615385 07 1.15385 08 2.23077 09 3.69231 10 3.53846 11 3.53846 12 3.30769 13 3.84615 14 3.53846 15 2.84615 16 3.69231 17 3.46154 18 2.92308 19 3.61538 20 3.23077 21 3.15385 22 3.92308 23 4.30769 bekir@hede:/free/iett$
Otobüs konum verileri en yoğun saatlerde ancak 2-3 kez güncelleniyor, gece de 02:00-05:00 arasında servisi de kapatıyorlar gibi, yani her şey yalanmış. İnanmadım bir de IETT'nin harita sayfasında da denedim, maalesef sonuçlar doğru çıktı. Öyle otobüs beklerken falan otobüs konumlarına bakmak çok anlamsızmış.
Bu arada yukarıda bahsettiğim "otobüsüm nerede" bağlantısı sık sık güncelleniyor gibi, doğruluğunu test etmedim ama belki oradaki veri gerçekten daha sık güncelleniyordur.
ibretlik paylaşım
ReplyDeletexml içine bakınca zaten son güncelleme tarihi veriliyor, bence sürekli kontrol etmene gerek yokmuş. duraklardaki panoların verileri nereden alınıyor bununla ilgili bir bulgun oldu mu?
ReplyDelete