Rename servicealerts to local terminology "Real Time Passenger Information System"
--- a/include/common-template.inc.php
+++ b/include/common-template.inc.php
@@ -185,17 +185,20 @@
$serviceAlerts = Array();
$globalAlerts = getServiceAlertsAsArray("agency", "0");
if ($globalAlerts != nullarray) {
+ // echo "getting alerts due to network wide";
$serviceAlerts = array_merge($serviceAlerts, $globalAlerts);
}
if (isset($stopid)) {
$stopAlerts = getServiceAlertsAsArray("stop", $stopid);
if ($stopAlerts != nullarray) {
+ // echo "getting alerts due to stop $stopid";
$serviceAlerts = array_merge($serviceAlerts, $stopAlerts);
}
}
if (isset($routeid)) {
$routeAlerts = getServiceAlertsAsArray("route", $routeid);
if ($routeAlerts != nullarray) {
+ // echo "getting alerts due to route $routeid";
$serviceAlerts = array_merge($serviceAlerts, $routeAlerts);
}
}
--- 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,6 +170,8 @@
$alert->addActivePeriod($tr);
$informedEntities = getInformedAlerts($current_alert['id'], $filter_class, $filter_id);
if (sizeof($informedEntities) > 0) {
+
+ $affectsFilteredEntities = true;
$informed_count++;
$informed = Array();
$es = new transit_realtime\EntitySelector();
@@ -218,7 +222,9 @@
$alert->setDescriptionText($tsDescriptionText);
}
$fe->setAlert($alert);
- $fm->addEntity($fe);
+ if ($affectsFilteredEntities) {
+ $fm->addEntity($fe);
+ }
}
if ($informed_count > 0) {
return $fm;
@@ -230,7 +236,7 @@
}
function getServiceAlertsAsArray($filter_class = "", $filter_id = "") {
-
+
$alerts = getServiceAlerts($filter_class, $filter_id);
if ($alerts != null) {
$codec = new DrSlump\Protobuf\Codec\PhpArray();
--- a/include/db/servicealert-dao.inc.php
+++ b/include/db/servicealert-dao.inc.php
@@ -44,17 +44,19 @@
return $query->fetch(PDO :: FETCH_ASSOC);
}
-function updateServiceAlert($alertID, $start, $end, $header, $description, $url) {
+function updateServiceAlert($alertID, $alert) {
global $conn;
- $query = 'update servicealerts_alerts set start=:start, "end"=:end, header=:header, description=:description, url=:url where id = :servicealert_id';
+ $query = 'update servicealerts_alerts set start=:start, "end"=:end, header=:header, description=:description, url=:url, cause=:cause, effect=:effect where id = :servicealert_id';
debug($query, "database");
$query = $conn->prepare($query);
- $query->bindParam(":servicealert_id", $alertID);
- $query->bindParam(":start", $start);
- $query->bindParam(":end", $end);
- $query->bindParam(":header", $header);
- $query->bindParam(":description", $description);
- $query->bindParam(":url", $url);
+ $query->bindValue(":servicealert_id", $alertID);
+ $query->bindValue(":start", $alert['startdate']);
+ $query->bindValue(":end", $alert['enddate']);
+ $query->bindValue(":header", $alert['header']);
+ $query->bindValue(":description", $alert['description']);
+ $query->bindValue(":url", $alert['url']);
+ $query->bindValue(":cause", $alert['cause']);
+ $query->bindValue(":effect", $alert['effect']);
$query->execute();
print_r($conn->errorInfo());
@@ -65,16 +67,19 @@
return $query->fetch(PDO :: FETCH_ASSOC);
}
-function addServiceAlert($start, $end, $header, $description, $url) {
+function addServiceAlert($alert) {
global $conn;
- $query = 'INSERT INTO servicealerts_alerts (start, "end", header, description, url) VALUES (:start, :end, :header, :description, :url) ';
+ $query = 'INSERT INTO servicealerts_alerts (start, "end", header, description, url,cause,effect) VALUES (:start, :end, :header, :description, :url,:cause,:effect) ';
debug($query, "database");
$query = $conn->prepare($query);
- $query->bindParam(":start", $start);
- $query->bindParam(":end", $end);
- $query->bindParam(":header", $header);
- $query->bindParam(":description", $description);
- $query->bindParam(":url", $url);
+ //print_r($alert);
+ $query->bindValue(":start", $alert['startdate']);
+ $query->bindValue(":end", $alert['enddate']);
+ $query->bindValue(":header", $alert['header']);
+ $query->bindValue(":description", $alert['description']);
+ $query->bindValue(":url", $alert['url']);
+ $query->bindValue(":cause", $alert['cause']);
+ $query->bindValue(":effect", $alert['effect']);
$query->execute();
print_r($conn->errorInfo());
@@ -114,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 != "") {
@@ -158,12 +164,14 @@
function addInformedAlert($serviceAlertID, $class, $id, $action) {
global $conn;
- $query = 'INSERT INTO servicealerts_informed (servicealert_id , informed_class , informed_id) VALUES(:servicealert_id ,:informed_class, :informed_id)';
+ $query = 'INSERT INTO servicealerts_informed (servicealert_id , informed_class , informed_id, informed_action)
+ VALUES(:servicealert_id ,:informed_class, :informed_id, :informed_action)';
debug($query, "database");
$query = $conn->prepare($query);
$query->bindParam(":servicealert_id", $serviceAlertID);
$query->bindParam(":informed_class", $class);
$query->bindParam(":informed_id", $id);
+ $query->bindParam(":informed_action", $action);
$query->execute();
print_r($conn->errorInfo());
--- a/include/db/stop-dao.inc.php
+++ b/include/db/stop-dao.inc.php
@@ -89,7 +89,7 @@
$query = "Select * from stops where stop_name LIKE :name;";
debug($query, "database");
$query = $conn->prepare($query);
- $name = "%" . $name . ";%";
+ $name = $name . "%";
$query->bindParam(":name", $name);
$query->execute();
if (!$query) {
--- /dev/null
+++ b/rtpis/gtfs-realtime.php
@@ -1,1 +1,53 @@
+<?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;
+}
+$json_types = Array("application/json","application/x-javascript","text/javascript","text/x-javascript","text/x-json");
+if ($_REQUEST['json']) {
+ $return = getServiceAlertsAsJSON($_REQUEST['filter_class'], $_REQUEST['filter_id']);
+ 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;
+}
+?>
--- /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,187 @@
+<?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');
+auth();
+include_header("Service Alert Editor", "serviceAlertEditor");
+/**
+ * Currently support:
+ * network inform
+ * stop remove: route patch, stop remove
+ * - stop search
+ * street inform: route inform, stop inform
+ * - street search
+ */
+if (isset($_REQUEST['saveedit'])) {
+
+ if ($_REQUEST['saveedit'] != "") {
+ updateServiceAlert($_REQUEST['saveedit'], $_REQUEST);
+ } else {
+ addServiceAlert($_REQUEST);
+ }
+ echo "Saved " . $_REQUEST['saveedit'];
+ die();
+}
+if ($_REQUEST['delete']) {
+ $deleteParts = explode(";", $_REQUEST['delete']);
+ deleteInformedAlert($deleteParts[0], $deleteParts[1], $deleteParts[2]);
+ echo "Deleted network inform for {$deleteParts[0]} ({$deleteParts[1]},{$deleteParts[2]})<br>\n";
+ die();
+}
+if ($_REQUEST['networkinform']) {
+ addInformedAlert($_REQUEST['networkinform'], "agency", "0", "inform");
+ echo "Added network inform for" . $_REQUEST['networkinform'];
+ die();
+}
+if ($_REQUEST['stopsearch']) {
+ addInformedAlert($_REQUEST['stopsearch'], "stop", $_REQUEST['stopid'], "remove");
+ echo "Added stop remove for" . $_REQUEST['stopsearch'] . ", stop" . $_REQUEST['stopid'] . "<br>\n";
+
+ foreach ($service_periods as $sp) {
+ echo "Remove from $sp routes<br>\n";
+ foreach (getStopRoutes($_REQUEST['stopid'], $sp) as $route) {
+ addInformedAlert($_REQUEST['stopsearch'], "route", $route['route_id'], "patch");
+ echo "Added route patch for" . $_REQUEST['stopsearch'] . ", route" . $route['route_id'] . "<br>\n";
+ }
+ }
+ die();
+}
+if ($_REQUEST['streetsearch']) {
+
+ echo "Informing stops of street<br>\n";
+ foreach (getStopsByName($_REQUEST['street']) as $stop) {
+ addInformedAlert($_REQUEST['streetsearch'], "stop", $stop['stop_id'], "inform");
+ echo "Added stop inform for" . $_REQUEST['streetsearch'] . ", stop" . $stop['stop_id'] . " ". $stop['stop_name']."<br>\n";
+
+ foreach ($service_periods as $sp) {
+ echo "Informing $sp routes<br>\n";
+ foreach (getStopRoutes($stop['stop_id'], $sp) as $route) {
+ addInformedAlert($_REQUEST['streetsearch'], "route", $route['route_id'], "inform");
+ echo "Added route inform for stop" . $_REQUEST['streetsearch'] . ", route" . $route['route_id'] . "<br>\n";
+ }
+ }
+ }
+
+ die();
+}
+?>
+Active and Future Alerts:
+<table>
+ <?php
+ foreach (getFutureAlerts() as $alert) {
+ echo "<tr><td>" . date("c", $alert['start']) . "</td><td>" . date("c", $alert['end']) . "</td><td>" . substr($alert['description'], 0, 999) . '</td><td><a href="?edit=' . $alert['id'] . '">edit</a></td></tr>';
+ }
+ ?>
+</table>
+<?php
+$alert = getServiceAlert($_REQUEST['edit']);
+?>
+<form action="<?php echo basename(__FILE__);
+?>" method="get">
+
+ <div data-role="fieldcontain">
+ <label for="startdate"> Start Date</label>
+ <input type="text" name="startdate" id="startdate" value="<?php
+ if ($alert['start'])
+ echo date("c", $alert['start']);
+ else
+ echo date("c", strtotime("0:00"));
+?>" />
+ </div>
+ <div data-role="fieldcontain">
+ <label for="enddate"> End Date </label>
+ <input type="text" name="enddate" id="enddate" value="<?php
+ if ($alert['end'])
+ echo date("c", $alert['end']);
+ else
+ echo date("c", strtotime("23:59"));
+?>" />
+ </div>
+ <div data-role="fieldcontain">
+ <label for="header">Header</label>
+ <input type="text" name="header" id="header" value="<?php echo $alert['header']; ?>" />
+ </div>
+ <div data-role="fieldcontain">
+ <label for="description">Description</label>
+ <textarea name="description">
+ <?php echo $alert['description']; ?></textarea>
+ </div>
+ <div data-role="fieldcontain">
+ <label for="url">URL</label>
+ <input type="text" name="url" id="url" value="<?php echo $alert['url']; ?>" />
+ </div>
+ <div data-role="fieldcontain">
+ <label for="cause"> Cause: </label>
+ <select name="cause" id="cause">
+
+ <?php
+ foreach ($serviceAlertCause as $key => $value) {
+ echo "<option value=\"$key\"" . ($key === $alert['cause'] ? " SELECTED" : "") . '>' . $value . '</option>';
+ }
+ ?>
+ </select></div>
+ <div data-role="fieldcontain">
+ <label for="effect"> Effect: </label>
+ <select name="effect" id="effect">
+ <?php
+ foreach ($serviceAlertEffect as $key => $value) {
+ echo "<option value=\"$key\"" . ($key === $alert['effect'] ? " SELECTED" : "") . '>' . $value . '</option>';
+ }
+ ?>
+ </select></div>
+ <input type="hidden" name="saveedit" value="<?php echo $_REQUEST['edit']; ?>"/>
+ <input type="submit" value="Save"/>
+</div></form>
+
+<?php
+if ($_REQUEST['edit']) {
+ echo "Informed Entities for ID {$_REQUEST['edit']}:";
+ echo '<table>';
+ foreach (getInformedAlerts($_REQUEST['edit'], "", "") as $informed) {
+ echo "<tr><td>{$informed['informed_class']}</td><td>{$informed['informed_id']}</td><td>{$informed['informed_action']}" . '</td><td><a href="?delete=' . $_REQUEST['edit'] . ';' . $informed['informed_class'] . ';' . $informed['informed_id'] . '">delete</a></td></tr>';
+ }
+ echo '</table>';
+ ?>
+ <form action="<?php echo basename(__FILE__);
+ ?>" method="get">
+ <input type="hidden" name="networkinform" value="<?php echo $_REQUEST['edit'];
+ ?>"/>
+ <input type="submit" value="Add Network Inform"/>
+ </form>
+ <form action="<?php echo basename(__FILE__);
+ ?>" method="get">
+ <div data-role="fieldcontain">
+ <label for="stopid">StopID to remove</label>
+ <input type="text" name="stopid" />
+ </div>
+ <input type="hidden" name="stopsearch" value="<?php echo $_REQUEST['edit'];
+ ?>"/>
+ <input type="submit" value="Stop Search"/>
+ </form>
+ <form action="<?php echo basename(__FILE__);
+ ?>" method="get">
+ <div data-role="fieldcontain">
+ <label for="street">Street to inform</label>
+ <input type="text" name="street" />
+ </div>
+ <input type="hidden" name="streetsearch" value="<?php echo $_REQUEST['edit'];
+ ?>"/>
+ <input type="submit" value="Street Search"/>
+ </form>
+ <?php
+}
+include_footer();
+?>
--- /dev/null
+++ b/rtpis/servicealert_viewer.php
@@ -1,1 +1,53 @@
+<?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');
+include_header("Service Alert Viewer", "serviceAlertViewer");
+/**
+ * Currently support:
+ * network inform
+ * stop remove: route patch, stop remove
+ * - stop search
+ * street inform: route inform, stop inform
+ * - street search
+ */
+if (!isset($_REQUEST['view'])) {
+
+?>
+Active and Future Alerts:
+<table>
+ <?php
+ foreach (getFutureAlerts() as $alert) {
+ echo "<tr><td>{$alert['header']}</td><td>" . substr($alert['description'], 0, 999) . '</td><td><a href="?view=' . $alert['id'] . '">View</a></td></tr>';
+ }
+ ?>
+</table>
+<?php
+} else {
+$alert = getServiceAlert($_REQUEST['view']);
+echo "<h1>{$alert['header']}</h1>
+<h2> From ".date("c",$alert['start'])." to ".date("c",$alert['end'])."</h2>
+<small>{$alert['description']}</small><br>
+Source: <A href='{$alert['url']}'>{$alert['url']}</a><br>";
+ echo "Informed Entities for ID {$_REQUEST['view']}:";
+ echo '<table>';
+ foreach (getInformedAlerts($_REQUEST['view'], "", "") as $informed) {
+ echo "<tr><td>{$informed['informed_class']}</td><td>{$informed['informed_id']}</td><td>{$informed['informed_action']}" . '</td></tr>';
+ }
+ echo '</table>';
+}
+include_footer();
+?>
--- /dev/null
+++ b/rtpis/siri.php
@@ -1,1 +1,8 @@
+<?php
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+?>
+
--- a/servicealerts/importer.py
+++ /dev/null
@@ -1,104 +1,1 @@
-# 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" ) )