mumbaitrains + apiviews minor optimization
This commit is contained in:
parent
413896befa
commit
7842288a63
|
@ -67,9 +67,9 @@ def areas(request):
|
||||||
def stops(request):
|
def stops(request):
|
||||||
q = request.GET.get("q", "")
|
q = request.GET.get("q", "")
|
||||||
if q != '':
|
if q != '':
|
||||||
qset = Stop.objects.find_approximate(q, TRIGRAM_THRESHOLD).select_related()
|
qset = Stop.objects.find_approximate(q, TRIGRAM_THRESHOLD).select_related('road', 'area')
|
||||||
else:
|
else:
|
||||||
qset = Stop.objects.all().select_related()
|
qset = Stop.objects.all().select_related('road', 'area')
|
||||||
srid = int(request.GET.get("srid", 4326))
|
srid = int(request.GET.get("srid", 4326))
|
||||||
return render_to_json_response({
|
return render_to_json_response({
|
||||||
'type': 'FeatureCollection',
|
'type': 'FeatureCollection',
|
||||||
|
|
0
chaloBEST/mumbaitrains/__init__.py
Normal file
0
chaloBEST/mumbaitrains/__init__.py
Normal file
32
chaloBEST/mumbaitrains/models.py
Normal file
32
chaloBEST/mumbaitrains/models.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
from django.contrib.gis.db import models
|
||||||
|
|
||||||
|
|
||||||
|
LINE_CHOICES = (
|
||||||
|
('Western', 'Western'),
|
||||||
|
('Central', 'Central'),
|
||||||
|
('Harbour', 'Harbour'),
|
||||||
|
)
|
||||||
|
|
||||||
|
class Train(models.Model):
|
||||||
|
number = models.CharField(max_length=128)
|
||||||
|
line = models.CharField(max_length=128, choices=LINE_CHOICES, db_index=True)
|
||||||
|
stations = models.ManyToManyField("Station", through='TrainStation')
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.number
|
||||||
|
|
||||||
|
class Station(models.Model):
|
||||||
|
name = models.CharField(max_length=128)
|
||||||
|
point = models.PointField(null=True, blank=True)
|
||||||
|
# line = models.CharField(choices=LINE_CHOICES, db_index=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class TrainStation(models.Model):
|
||||||
|
train = models.ForeignKey(Train)
|
||||||
|
station = models.ForeignKey(Station)
|
||||||
|
serial = models.IntegerField()
|
||||||
|
time = models.TimeField()
|
||||||
|
|
||||||
|
# Create your models here.
|
52
chaloBEST/mumbaitrains/parse.py
Normal file
52
chaloBEST/mumbaitrains/parse.py
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
from pyquery import PyQuery as pq
|
||||||
|
from models import *
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
BASE_URL = 'http://mumbailifeline.com/'
|
||||||
|
|
||||||
|
'''
|
||||||
|
eg.:
|
||||||
|
>>>parseURL('http://mumbailifeline.com/timetable.php?sel_route=central&sfrom=Mumbai_CST&sto=Masjid&time1=4:00%20am&time2=11:59%20PM', Central')
|
||||||
|
'''
|
||||||
|
def parseURL(url, line):
|
||||||
|
d = pq(url=url)
|
||||||
|
table = d('#gradient-style')
|
||||||
|
trs = table.find('tr')
|
||||||
|
for i in range(1,len(trs)):
|
||||||
|
thisTr = trs[i]
|
||||||
|
td = thisTr.getchildren()[0]
|
||||||
|
a = td.find('a')
|
||||||
|
trainNo = a.text.strip()
|
||||||
|
print "Saving %s ... " % trainNo
|
||||||
|
trainURL = BASE_URL + a.get('href').strip()
|
||||||
|
saveTrain(trainURL, trainNo, line)
|
||||||
|
|
||||||
|
|
||||||
|
def saveTrain(url, no, line):
|
||||||
|
train, created = Train.objects.get_or_create(number=no, line=line)
|
||||||
|
if not created:
|
||||||
|
print "Train no %s already exists in db, skipping" % no
|
||||||
|
return
|
||||||
|
train.save()
|
||||||
|
d = pq(url=url)
|
||||||
|
table = d.find('table')[3]
|
||||||
|
for tr in table.iterfind('tr'):
|
||||||
|
children = tr.getchildren()
|
||||||
|
serial = 0
|
||||||
|
if len(tr.findall('td')) > 0:
|
||||||
|
td0 = children[0]
|
||||||
|
a = td0.find('a')
|
||||||
|
stationName = a.text.strip()
|
||||||
|
station, created = Station.objects.get_or_create(name=stationName)
|
||||||
|
timeString = children[1].find('strong').text
|
||||||
|
hour = int(timeString.split(":")[0].strip()) - 1
|
||||||
|
mins = int(timeString.split(":")[1][0:2])
|
||||||
|
ampm = timeString[-2:]
|
||||||
|
if ampm == 'pm':
|
||||||
|
hour = hour + 12
|
||||||
|
stationTime = datetime.time(hour,mins)
|
||||||
|
st = TrainStation(train=train, station=station, time=stationTime, serial=serial)
|
||||||
|
st.save()
|
||||||
|
serial += 1
|
||||||
|
print "Saved %s" % no
|
||||||
|
|
16
chaloBEST/mumbaitrains/tests.py
Normal file
16
chaloBEST/mumbaitrains/tests.py
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
"""
|
||||||
|
This file demonstrates writing tests using the unittest module. These will pass
|
||||||
|
when you run "manage.py test".
|
||||||
|
|
||||||
|
Replace this with more appropriate tests for your application.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
|
||||||
|
class SimpleTest(TestCase):
|
||||||
|
def test_basic_addition(self):
|
||||||
|
"""
|
||||||
|
Tests that 1 + 1 always equals 2.
|
||||||
|
"""
|
||||||
|
self.assertEqual(1 + 1, 2)
|
1
chaloBEST/mumbaitrains/views.py
Normal file
1
chaloBEST/mumbaitrains/views.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# Create your views here.
|
|
@ -98,6 +98,7 @@ MIDDLEWARE_CLASSES = (
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
|
'debug_toolbar.middleware.DebugToolbarMiddleware'
|
||||||
)
|
)
|
||||||
|
|
||||||
ROOT_URLCONF = 'chaloBEST.urls'
|
ROOT_URLCONF = 'chaloBEST.urls'
|
||||||
|
@ -120,7 +121,9 @@ INSTALLED_APPS = (
|
||||||
# Uncomment the next line to enable admin documentation:
|
# Uncomment the next line to enable admin documentation:
|
||||||
'django.contrib.gis',
|
'django.contrib.gis',
|
||||||
'django_extensions',
|
'django_extensions',
|
||||||
|
'debug_toolbar',
|
||||||
'mumbai',
|
'mumbai',
|
||||||
|
'mumbaitrains',
|
||||||
# 'django.contrib.admindocs',
|
# 'django.contrib.admindocs',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user