Fix myway_timeliness_route
--- /dev/null
+++ b/.gitmodules
@@ -1,1 +1,4 @@
+[submodule "lib/amon-php"]
+ path = lib/amon-php
+ url = https://github.com/martinrusev/amon-php.git
--- a/about.php
+++ b/about.php
@@ -20,8 +20,8 @@
<p>
Busness Time - An ACT bus timetable webapp<br />
Based on the maxious-canberra-transit-feed (<a
- href="http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip">download</a>,
- last updated <?php echo date("F d Y.", @filemtime('cbrfeed.zip')); ?>)<br />
+ href="http://busresources.lambdacomplex.org/cbrfeed.zip">download</a>,
+ last updated <?php echo date("F d Y.", @filemtime('../busresources/cbrfeed.zip')); ?>)<br />
Source code for the <a
href="https://github.com/maxious/ACTBus-data">transit
feed</a> and <a href="https://github.com/maxious/ACTBus-ui">this
--- a/aws/busuidb.sh
+++ b/aws/busuidb.sh
@@ -7,10 +7,10 @@
psql -d transitdata -f /var/www/transitdata.cbrfeed.sql
#createuser transitdata -SDRP
#password transitdata
-#psql -d transitdata -c "GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips\
-#,servicealerts_alerts,servicealerts_informed TO transitdata;"
-#psql -d transitdata -c "GRANT SELECT,INSERT ON TABLE myway_observations,myway_routes,myway_stops,myway_timingdeltas TO transitdata;"
-#psql -d transitdata -c "GRANT SELECT,INSERT,UPDATE ON TABLE myway_routes,myway_stops TO transitdata;"
+#psql -d transitdata -c "GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips TO transitdata;"
+#psql -d transitdata -c "GRANT SELECT,INSERT ON TABLE myway_observations,myway_timingdeltas,myway_routes,myway_stops TO transitdata;"
+#psql -d transitdata -c "GRANT SELECT,INSERT,UPDATE ON TABLE servicealerts_alerts,servicealerts_informed TO transitdata;"
+#psql -d transitdata -c "GRANT USAGE,SELECT ON SEQUENCE servicealerts_alerts_id_seq TO transitdata;"
##psql -d transitdata -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO transitdata;"
## INSERT INTO geometry_columns(f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, "type")
##SELECT '', 'public', 'shapes', 'shape_pt', ST_CoordDim(shape_pt), ST_SRID(shape_pt), GeometryType(shape_pt)
--- a/css/local.css.php
+++ b/css/local.css.php
@@ -55,7 +55,7 @@
visibility: hidden;
display: none;
}
- #servicewarning {
+ .servicewarning {
padding: 1em;
margin-bottom: 0.5em;
text-size: 0.2em;
--- a/feedback.php
+++ b/feedback.php
@@ -67,7 +67,7 @@
echo "\nServer host/IP: ".php_uname("n");
echo "\nCurrent date/time: ". date("c");
echo "\nCurrent code revision: ".exec("git rev-parse --short HEAD");
- echo "\nCurrent timetables version: ".date("c",@filemtime('cbrfeed.zip'));
+ echo "\nCurrent timetables version: ".date("c",@filemtime('../busresources/cbrfeed.zip'));
echo "\nDump of session: ".print_r($_SESSION,true);
?>
</textarea>
--- a/include/common-geo.inc.php
+++ b/include/common-geo.inc.php
@@ -58,8 +58,8 @@
$output = "";
if ($collapsible)
$output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>';
- if (isIOSDevice()) $output.= '<img class="hiresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=2&sensor=true" width=' . $width . ' height=' . $height . '>';
- else $output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=1&format=jpg&sensor=true" width=' . $width . ' height=' . $height . '>';
+ if (isIOSDevice()) $output.= '<img class="hiresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=2&sensor=true" width=' . $width . ' height=' . $height . ' alt="map of stop location">';
+ else $output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=1&format=jpg&sensor=true" width=' . $width . ' height=' . $height . ' alt="map of stop location">';
if ($collapsible)
$output.= '</div>';
--- a/include/common-request.inc.php
+++ b/include/common-request.inc.php
@@ -51,6 +51,9 @@
if (isset($_REQUEST['routeDestination'])) {
$routeDestination = urldecode(filter_var($_REQUEST['routeDestination'], FILTER_SANITIZE_ENCODED));
}
+if (isset($_REQUEST['routename'])) {
+ $routename = urldecode(filter_var($_REQUEST['routename'], FILTER_SANITIZE_ENCODED));
+}
if (isset($_REQUEST['stopcode'])) {
$stopcode = filter_var($_REQUEST['stopcode'], FILTER_SANITIZE_STRING);
}
--- a/include/common-template.inc.php
+++ b/include/common-template.inc.php
@@ -176,32 +176,35 @@
$overrides = getServiceOverride();
if (isset($overrides['service_id'])) {
if ($overrides['service_id'] == "noservice") {
- echo '<div id="servicewarning">Buses are <strong>not running today</strong> due to industrial action/public holiday. See <a
+ echo '<div class="servicewarning">Buses are <strong>not running today</strong> due to industrial action/public holiday. See <a
href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>';
} else {
- echo '<div id="servicewarning">Buses are running on an altered timetable today due to industrial action/public holiday. See <a href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>';
+ echo '<div class="servicewarning">Buses are running on an altered timetable today due to industrial action/public holiday. See <a href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>';
}
}
$serviceAlerts = Array();
$globalAlerts = getServiceAlertsAsArray("agency", "0");
- if ($globalAlerts != nullarray) {
+ if ($globalAlerts != null) {
+ // echo "getting alerts due to network wide";
$serviceAlerts = array_merge($serviceAlerts, $globalAlerts);
}
if (isset($stopid)) {
$stopAlerts = getServiceAlertsAsArray("stop", $stopid);
- if ($stopAlerts != nullarray) {
+ if ($stopAlerts != null) {
+ // echo "getting alerts due to stop $stopid";
$serviceAlerts = array_merge($serviceAlerts, $stopAlerts);
}
}
if (isset($routeid)) {
$routeAlerts = getServiceAlertsAsArray("route", $routeid);
- if ($routeAlerts != nullarray) {
+ if ($routeAlerts != null) {
+ // echo "getting alerts due to route $routeid";
$serviceAlerts = array_merge($serviceAlerts, $routeAlerts);
}
}
if (isset($serviceAlerts['entity']) && sizeof($serviceAlerts['entity']) > 0) {
foreach ($serviceAlerts['entity'] as $entity) {
- echo "<div id='servicewarning'><b>{$entity['alert']['header_text']['translation'][0]['text']}</b> <small>"
+ echo "<div class='servicewarning'><b>{$entity['alert']['header_text']['translation'][0]['text']}</b> <small>"
. date("F jS Y, g:i a", $entity['alert']['active_period'][0]['start']) . " to "
. date("F jS Y, g:i a", $entity['alert']['active_period'][0]['end']) . "</small>
<br>Warning: {$entity['alert']['description_text']['translation'][0]['text']}
@@ -226,7 +229,7 @@
s.parentNode.insertBefore(ga, s);
})();</script>";
$googleAnalyticsImageUrl = googleAnalyticsGetImageUrl();
- echo '<noscript><img src="' . $googleAnalyticsImageUrl . '" /></noscript>';
+ echo '<noscript><img src="' . $googleAnalyticsImageUrl . '" alt=""/></noscript>';
}
echo "\n</div></div></body></html>";
}
--- a/include/common-transit.inc.php
+++ b/include/common-transit.inc.php
@@ -152,12 +152,14 @@
$current_alerts = getCurrentAlerts();
$informed_count = 0;
if (sizeof($current_alerts) > 0) {
+
$fm = new transit_realtime\FeedMessage();
$fh = new transit_realtime\FeedHeader();
$fh->setGtfsRealtimeVersion(1);
$fh->setTimestamp(time());
$fm->setHeader($fh);
foreach ($current_alerts as $current_alert) {
+ $affectsFilteredEntities = false;
$fe = new transit_realtime\FeedEntity();
$fe->setId($current_alert['id']);
$fe->setIsDeleted(false);
@@ -168,7 +170,10 @@
$alert->addActivePeriod($tr);
$informedEntities = getInformedAlerts($current_alert['id'], $filter_class, $filter_id);
if (sizeof($informedEntities) > 0) {
- $informed_count++;
+
+ $affectsFilteredEntities = true;
+ foreach ($informedEntities as $informedEntity) {
+ $informed_count++;
$informed = Array();
$es = new transit_realtime\EntitySelector();
if ($informedEntity['informed_class'] == "agency") {
@@ -186,6 +191,7 @@
$es->setTrip($td);
}
$alert->addInformedEntity($es);
+}
}
if ($current_alert['cause'] != "") {
$alert->setCause(constant("transit_realtime\Alert\Cause::" . $current_alert['cause']));
@@ -212,13 +218,15 @@
if ($current_alert['description'] != "") {
$tsDescriptionText = new transit_realtime\TranslatedString();
$tDescriptionText = new transit_realtime\TranslatedString\Translation();
- $tDescriptionText->setText($current_alert['description']);
+ $tDescriptionText->setText(trim($current_alert['description']));
$tDescriptionText->setLanguage("en");
$tsDescriptionText->addTranslation($tDescriptionText);
$alert->setDescriptionText($tsDescriptionText);
}
$fe->setAlert($alert);
- $fm->addEntity($fe);
+ if ($affectsFilteredEntities) {
+ $fm->addEntity($fe);
+ }
}
if ($informed_count > 0) {
return $fm;
@@ -230,14 +238,14 @@
}
function getServiceAlertsAsArray($filter_class = "", $filter_id = "") {
-
+
$alerts = getServiceAlerts($filter_class, $filter_id);
if ($alerts != null) {
$codec = new DrSlump\Protobuf\Codec\PhpArray();
return $codec->encode($alerts);
} else {
- return nullarray;
+ return null;
}
}
--- a/include/common.inc.php
+++ b/include/common.inc.php
@@ -51,13 +51,20 @@
|| strstr($_SERVER['PHP_SELF'], "lib/")
|| strstr($_SERVER['PHP_SELF'], "geo/")
|| strstr($_SERVER['PHP_SELF'], "include/")
- || strstr($_SERVER['PHP_SELF'], "servicealerts/"))
+ || strstr($_SERVER['PHP_SELF'], "rtpis/")) {
$basePath = "../";
+}
function isDebugServer() {
return php_sapi_name() == "cli" || strstr(php_uname('n'),"actbus") || isset($_SERVER['SERVER_NAME']) && ( $_SERVER['SERVER_NAME'] == "azusa" || $_SERVER['SERVER_NAME'] == "vanille"
|| $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "192.168.1.8" || $_SERVER['SERVER_NAME'] == "192.168.178.24");
+}
+
+if (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] == "maxious.xen.prgmr.com") {
+// Set the exception handler
+require $basePath."/lib/amon-php/amon.php";
+Amon::setup_exception_handler();
}
include_once ("common-geo.inc.php");
--- a/include/db/route-dao.inc.php
+++ b/include/db/route-dao.inc.php
@@ -59,7 +59,12 @@
databaseError($conn->errorInfo());
return Array();
}
- return $query->fetchAll();
+ $results = $query->fetchAll();
+ if (is_array($results)) {
+ return $results;
+ } else {
+ return Array($results);
+ }
}
function getRouteDescription($routeID, $directionID) {
$trip = getRouteNextTrip($routeID, $directionID);
@@ -120,7 +125,7 @@
function getRouteNextTrip($routeID, $directionID) {
global $conn;
- $query = "select routes.route_id,direction_id,trips.trip_id,trip_headsign,departure_time from routes join trips on trips.route_id = routes.route_id
+ $query = "select routes.route_id,routes.route_url,direction_id,trips.trip_id,trip_headsign,departure_time,service_id from routes join trips on trips.route_id = routes.route_id
join stop_times on stop_times.trip_id = trips.trip_id where arrival_time between :currentTime and :futureTime
and routes.route_id = :routeID and trips.direction_id = :directionID order by
arrival_time limit 1";
--- a/include/db/servicealert-dao.inc.php
+++ b/include/db/servicealert-dao.inc.php
@@ -119,6 +119,7 @@
function getInformedAlerts($id, $filter_class, $filter_id) {
global $conn;
+ //echo "$id, $filter_class, $filter_id\n";
$query = "SELECT * from servicealerts_informed where servicealert_id = :servicealert_id";
if ($filter_class != "") {
--- /dev/null
+++ b/lib/amon-php
--- a/myway/myway_timeliness_route.json.php
+++ b/myway/myway_timeliness_route.json.php
@@ -21,12 +21,12 @@
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
?>
{
-"label": "<?php echo $_REQUEST['routeid']; ?>",
+"label": "<?php echo $routename; ?>",
"data": <?php
-$query = "select * from myway_timingdeltas where route_name = :route_name AND abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas) order by stop_sequence;";
+$query = "select * from myway_timingdeltas where route_name = :route_name
+AND abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas) order by stop_sequence;";
$query = $conn->prepare($query);
-$_REQUEST['routeid'].=" ";
-$query->bindParam(':route_name', $_REQUEST['routeid'], PDO::PARAM_STR);
+$query->bindParam(':route_name', $routename, PDO::PARAM_STR);
$query->execute();
if (!$query) {
@@ -39,3 +39,4 @@
echo "[" . implode(",", $points) . "]";
?>
}
+
--- a/myway/myway_timeliness_route.php
+++ b/myway/myway_timeliness_route.php
@@ -22,7 +22,7 @@
<script language="javascript" type="text/javascript" src="../js/flot/jquery.flot.js"></script>
<form method="get" action="">
- <select id="routeid" name="routeid">
+ <select id="routename" name="routename">
<?php
$query = "select distinct route_name from myway_timingdeltas order by route_name";
$query = $conn->prepare($query);
@@ -59,12 +59,12 @@
// fetch one series, adding to what we got
var alreadyFetched = {};
- $("#routeid").change(function () {
+ $("#routename").change(function () {
var select = $(this);
// find the URL in the link right next to us
// var dataurl = button.siblings('a').attr('href');
- var dataurl = "myway_timeliness_route.json.php?routeid=" + select.val();
+ var dataurl = "myway_timeliness_route.json.php?routename=" + select.val();
// then fetch the data with jQuery
function onDataReceived(series) {
// extract the first coordinate pair so you can see that
--- a/routeList.php
+++ b/routeList.php
@@ -50,17 +50,17 @@
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >';
foreach ($routes as $route) {
$time = getRouteAtStop($route['route_id'], $route['direction_id'], $route['stop_id']);
- $start = getTripStartingPoint($time['trip_id']);
- $end = getTripDestination($time['trip_id']);
+ $start = getTripStartingPoint($time['trip_id']);
+ $end = getTripDestination($time['trip_id']);
//print_r($route);
echo '<li> <a href="trip.php?routeid=' . $route['route_id'] . '&directionid=' . $route['direction_id'] . '"><h3>' . $route['route_short_name'] . "</h3>
- <p>" . $time['trip_headsign'] . (strstr($time['trip_headsign'], "bound") === false ? "bound" : "") . " from ".$start['stop_name']." to ".$end['stop_name'] . " (" . ucwords($time['service_id']) . ")</p>";
+ <p>" . $time['trip_headsign'] . (strstr($time['trip_headsign'], "bound") === false ? "bound" : "") . " from " . $start['stop_name'] . " to " . $end['stop_name'] . " (" . ucwords($time['service_id']) . ")</p>";
$stop = getStop($route['stop_id']);
-echo "<p>Board at ".$stop['stop_name']."</p>";
+ echo "<p>Board at " . $stop['stop_name'] . "</p>";
echo '<span class="ui-li-count">' . ($time['arrival_time'] ? $time['arrival_time'] : "No more trips today") . "<br>" . floor($route['distance']) . 'm away</span>';
-
- echo" </a></li>\n";
+
+ echo" </a></li>\n";
}
}
@@ -92,7 +92,8 @@
} else if (isset($nearby)) {
$routes = Array();
include_header("Routes Nearby", "routeList", true, true);
- if (isset($_SESSION['lat'])) trackEvent("Route Lists", "Routes Nearby", $_SESSION['lat'] . "," . $_SESSION['lon']);
+ if (isset($_SESSION['lat']))
+ trackEvent("Route Lists", "Routes Nearby", $_SESSION['lat'] . "," . $_SESSION['lon']);
navbar();
placeSettings();
if (!isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == "") {
@@ -132,7 +133,7 @@
$seriesRange[$seriesNum]['max'] = $routeNumber;
$seriesRange[$seriesNum]['min'] = $routeNumber;
}
- $routeSeries[$seriesNum][$seriesNum . "-" . $row[1] . "-" . $row[0]] = $row;
+ $routeSeries[$seriesNum][] = null;
}
}
ksort($routeSeries);
@@ -157,7 +158,8 @@
displayRoutes(getRoutesByDestination($routeDestination));
} else {
foreach (getRoutesByDestination() as $destination) {
- echo '<li><a href="' . curPageURL() . '/routeList.php?routeDestination=' . urlencode($destination['stop_name']) . '">' . $destination['stop_name'] . "... </a></li>\n";
+ echo '<li><a href="' . curPageURL() . '/routeList.php?routeDestination='
+ . urlencode($destination['stop_name']) . '">' . $destination['stop_name'] . "... </a></li>\n";
}
}
}
--- /dev/null
+++ b/rtpis/gtfs-realtime.php
@@ -1,1 +1,85 @@
+<?php
+/*
+ * Copyright 2010,2011 Alexander Sadleir
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+include ('../include/common.inc.php');
+function accept_header($header = false) {
+ // http://jrgns.net/parse_http_accept_header
+ $toret = null;
+ $header = $header ? $header : (array_key_exists('HTTP_ACCEPT', $_SERVER) ? $_SERVER['HTTP_ACCEPT']: false);
+ if ($header) {
+ $types = explode(',', $header);
+ $types = array_map('trim', $types);
+ foreach ($types as $one_type) {
+ $one_type = explode(';', $one_type);
+ $type = array_shift($one_type);
+ if ($type) {
+ list($precedence, $tokens) = self::accept_header_options($one_type);
+ list($main_type, $sub_type) = array_map('trim', explode('/', $type));
+ $toret[] = array('main_type' => $main_type, 'sub_type' => $sub_type, 'precedence' => (float)$precedence, 'tokens' => $tokens);
+ }
+ }
+ usort($toret, array('Parser', 'compare_media_ranges'));
+ }
+ return $toret;
+}
+function usage() {
+echo "Usage notes: Must specify format json/protobuf and gtfs-realtime feedtype alerts/updates. If callback is specified, will provide jsonp. Can filter with parmaters filter_class route/stop and filter_id with the id specified in GTFS.";
+die();
+}
+
+$filter_class = (isset($_REQUEST['filter_class']) ? $_REQUEST['filter_class'] : "");
+$filter_id = (isset($_REQUEST['filter_id']) ? $_REQUEST['filter_id']:"");
+
+$json_types = Array("application/json","application/x-javascript","text/javascript","text/x-javascript","text/x-json");
+if ($_REQUEST['json']) {
+if ($_REQUEST['alerts']) {
+ $return = getServiceAlertsAsJSON($filter_class,$filter_id);
+} else if ($_REQUEST['updates']) {
+ $return = getTripUpdatesAsJSON($filter_class,$filter_id);
+} else {
+ usage();
+}
+ header('Content-Type: application/json; charset=utf8');
+// header('Access-Control-Allow-Origin: http://bus.lambdacomplex.org/');
+ header('Access-Control-Max-Age: 3628800');
+ header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
+ if (isset($_GET['callback'])) {
+ $json = '(' . $return . ');'; //must wrap in parens and end with semicolon
+ //print_r($_GET['callback'] . $json); //callback is prepended for json-p
+ }
+ else {
+ echo $return;
+ }
+} else if ($_REQUEST['protobuf']) {
+if ($_REQUEST['alerts']) {
+ $return = getServiceAlertsAsBinary($filter_class,$filter_id);
+} else if ($_REQUEST['updates']) {
+ $return = getTripUpdatesAsBinary($filter_class,$filter_id);
+} else {
+ usage();
+}
+ header('Content-Type: application/x-protobuf');
+header('Content-Disposition: attachment; filename="'.(isset($_REQUEST['updates'])?"updates.":"alerts.").date("c").'.protobuf"');
+// header('Access-Control-Allow-Origin: http://bus.lambdacomplex.org/');
+ header('Access-Control-Max-Age: 3628800');
+ header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
+ echo $return;
+} else {
+usage();
+}
+?>
+
--- /dev/null
+++ b/rtpis/importer.py
@@ -1,1 +1,104 @@
+# info
+# http://stackoverflow.com/questions/4206882/named-entity-recognition-with-preset-list-of-names-for-python-php/4207128#4207128
+# http://alias-i.com/lingpipe/demos/tutorial/ne/read-me.html approximate dist
+# http://streamhacker.com/2008/12/29/how-to-train-a-nltk-chunker/ more training
+# http://www.postgresql.org/docs/9.1/static/pgtrgm.html
+# data sources
+# http://twitter.com/#!/ACTEmergencyInf instant site wide
+# http://twitter.com/#!/ACTPol_Traffic
+# http://esa.act.gov.au/feeds/currentincidents.xml
+
+# source: https://gist.github.com/322906/90dea659c04570757cccf0ce1e6d26c9d06f9283
+# to install python -m nltk.downloader punkt
+import nltk
+import tweepy
+import psycopg2
+import pickle
+
+from iniparse import INIConfig
+
+def insert_service_alert_sitewide(heading, message, url):
+ print "NaN"
+
+def insert_service_alert_for_street(streets, heading, message, url):
+ conn_string = "host='localhost' dbname='energymapper' user='postgres' password='snmc'"
+ # print the connection string we will use to connect
+ print "Connecting to database\n ->%s" % (conn_string)
+ try:
+ # get a connection, if a connect cannot be made an exception will be raised here
+ conn = psycopg2.connect(conn_string)
+
+ # conn.cursor will return a cursor object, you can use this cursor to perform queries
+ cursor = conn.cursor()
+
+ # execute our Query
+ cursor.execute("")
+
+ # retrieve the records from the database
+ records = cursor.fetchall()
+
+ for record in records:
+ ys.append(record[0])
+ # >>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
+ #>>> cur.statusmessage
+ #'INSERT 0 1'
+ except:
+ # Get the most recent exception
+ exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
+ # Exit the script and print an error telling what happened.
+ sys.exit("Database connection failed!\n ->%s" % (exceptionValue))
+
+
+def extract_entity_names(t):
+ entity_names = []
+
+ if hasattr(t, 'node') and t.node:
+ if t.node == 'NE':
+ entity_names.append(' '.join([child[0] for child in t]))
+ else:
+ for child in t:
+ entity_names.extend(extract_entity_names(child))
+
+ return entity_names
+
+def extract_names(sample):
+ sentences = nltk.sent_tokenize(sample)
+ tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
+ tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
+ chunked_sentences = nltk.batch_ne_chunk(tagged_sentences, binary=True)
+ # chunked/tagged may be enough to just find and match the nouns
+
+ entity_names = []
+ for tree in chunked_sentences:
+ # Print results per sentence
+ # print extract_entity_names(tree)
+
+ entity_names.extend(extract_entity_names(tree))
+
+ # Print all entity names
+ #print entity_names
+
+ # Print unique entity names
+ print set(entity_names)
+
+cfg = INIConfig(open('/tmp/aws.ini'))
+
+auth = tweepy.OAuthHandler(cfg.api_keys.twitter_consumer_key, cfg.api_keys.twitter_consumer_secret)
+auth.set_access_token(cfg.api_keys.twitter_access_token, cfg.api_keys.twitter_access_token_secret)
+
+#api = tweepy.API(auth)
+api = tweepy.API()
+# If the authentication was successful, you should
+# see the name of the account print out
+#print api.me().name
+# https://github.com/tweepy/tweepy/blob/master/tweepy/api.py
+for status in api.user_timeline(screen_name="ACTPol_Traffic",exclude_replies='true'):
+ print status.text
+ print status.created_at
+ print extract_names(status.text)
+# print api.update_status(status="test")
+
+last_tweet_ids = { "lion": "111", "kitty": "2222" }
+pickle.dump( last_tweet_ids, open( "save.p", "wb" ) )
+last_tweet_ids = pickle.load( open( "save.p", "rb" ) )
--- /dev/null
+++ b/rtpis/index.php
@@ -1,1 +1,21 @@
+<?php
+include ('../include/common.inc.php');
+include_header("Service Alerts", "index");
+echo '<ul data-role="listview" data-theme="e" data-groupingtheme="e">';
+
+ if ($_SESSION['authed'] == true) {
+ echo' <li><a href="servicealert_editor.php"><h3>servicealert_editor</h3>
+ <p>servicealert_editor</p></a></li>';
+ }
+ echo' <li><a href="servicealert_viewer.php"><h3>Service Alert Viewer</h3>
+ <p>Browse current network alerts</p></a></li>';
+
+ echo' </ul>';
+
+?> </div>
+<?php
+include_footer()
+?>
+
+
--- /dev/null
+++ b/rtpis/punkt.zip
--- /dev/null
+++ b/rtpis/servicealert_editor.php
@@ -1,1 +1,189 @@
+<?php
+/*
+ * Copyright 2010,2011 Alexander Sadleir
+ Licensed unde