Beispiel #1
0
function api_getMPsInfo_id($ids)
{
    $fields = preg_split('#\\s*,\\s*#', get_http_var('fields'), -1, PREG_SPLIT_NO_EMPTY);
    $ids = preg_split('#\\s*,\\s*#', $ids, -1, PREG_SPLIT_NO_EMPTY);
    $safe_ids = array(0);
    foreach ($ids as $id) {
        if (ctype_digit($id)) {
            $safe_ids[] = $id;
        }
    }
    $ids = join(',', $safe_ids);
    $db = new ParlDB();
    $last_mod = 0;
    $q = $db->query("select person_id, data_key, data_value, lastupdate from personinfo\n\t\twhere person_id in (" . $ids . ")");
    if ($q->rows()) {
        $output = array();
        for ($i = 0; $i < $q->rows(); $i++) {
            $data_key = $q->field($i, 'data_key');
            if (count($fields) && !in_array($data_key, $fields)) {
                continue;
            }
            $pid = $q->field($i, 'person_id');
            $output[$pid][$data_key] = $q->field($i, 'data_value');
            $time = strtotime($q->field($i, 'lastupdate'));
            if ($time > $last_mod) {
                $last_mod = $time;
            }
        }
        $q = $db->query("select memberinfo.*, person_id from memberinfo, member\n\t\t\twhere memberinfo.member_id=member.member_id and person_id in (" . $ids . ")\n\t\t\torder by person_id,member_id");
        if ($q->rows()) {
            $oldmid = 0;
            $count = -1;
            for ($i = 0; $i < $q->rows(); $i++) {
                $data_key = $q->field($i, 'data_key');
                if (count($fields) && !in_array($data_key, $fields)) {
                    continue;
                }
                $mid = $q->field($i, 'member_id');
                $pid = $q->field($i, 'person_id');
                if (!isset($output[$pid]['by_member_id'])) {
                    $output[$pid]['by_member_id'] = array();
                }
                if ($oldmid != $mid) {
                    $count++;
                    $oldmid = $mid;
                    $output[$pid]['by_member_id'][$count]['member_id'] = $mid;
                }
                $output[$pid]['by_member_id'][$count][$data_key] = $q->field($i, 'data_value');
                $time = strtotime($q->field($i, 'lastupdate'));
                if ($time > $last_mod) {
                    $last_mod = $time;
                }
            }
        }
        ksort($output);
        api_output($output, $last_mod);
    } else {
        api_error('Unknown person ID');
    }
}
Beispiel #2
0
function api_getDivisions_postcode($pc)
{
    $pc = preg_replace('#[^0-9]#i', '', $pc);
    $output = array();
    if (is_postcode($pc)) {
        $constituency = postcode_to_constituency($pc);
        if ($constituency == 'CONNECTION_TIMED_OUT') {
            api_error('Connection timed out');
        } elseif ($constituency) {
            if (is_array($constituency)) {
                $constituencies = $constituency;
            } else {
                $constituencies = array($constituency);
            }
            foreach ($constituencies as $c) {
                $output[] = array('name' => html_entity_decode($c));
            }
        } else {
            api_error('Unknown postcode');
        }
    } else {
        api_error('Invalid postcode');
    }
    api_output($output);
}
function api_getJournoArticles_invoke($params)
{
    $offset = (int) $params['offset'];
    $limit = (int) $params['limit'];
    if (!$limit) {
        $limit = 100;
    }
    if (!$offset) {
        $offset = 0;
    }
    $j = $params['journo'];
    if (!$j) {
        api_error("required parameter 'journo' is missing");
        return;
    }
    $jfield = is_numeric($j) ? 'id' : 'ref';
    $sql = <<<EOT
SELECT a.id, a.title, a.srcorg, a.permalink, a.description, a.pubdate
    FROM ((article a INNER JOIN journo_attr attr ON a.id=attr.article_id)
        INNER JOIN journo j ON j.id=attr.journo_id)
    WHERE a.status='a' AND j.status='a' AND j.{$jfield}=?
    ORDER BY a.pubdate DESC
    LIMIT ?
    OFFSET ?
EOT;
    $articles = db_getAll($sql, $j, $limit, $offset);
    foreach ($articles as &$a) {
        $d = new DateTime($a['pubdate']);
        $a['pubdate'] = $d->format('c');
    }
    $output = array('results' => $articles);
    api_output($output);
}
Beispiel #4
0
function display_author_lastname_prefix($lastname, $firstname, $callback = '')
{
    global $config;
    global $couch;
    $first_letter = mb_substr($firstname, 0, 1);
    $startkey = array($lastname, $first_letter);
    $endkey = array($lastname, $first_letter . mb_convert_encoding('&#xfff0;', 'UTF-8', 'HTML-ENTITIES'));
    $url = '_design/author/_view/lastname_firstname?startkey=' . json_encode($startkey) . '&endkey=' . json_encode($endkey) . '&group_level=2';
    if ($config['stale']) {
        $url .= '&stale=ok';
    }
    $resp = $couch->send("GET", "/" . $config['couchdb_options']['database'] . "/" . $url);
    $response_obj = json_decode($resp);
    $obj = new stdclass();
    $obj->status = 404;
    $obj->url = $url;
    if (isset($response_obj->error)) {
        $obj->error = $response_obj->error;
    } else {
        if (count($response_obj->rows) == 0) {
            $obj->error = 'Not found';
        } else {
            $obj->status = 200;
            $obj->results = array();
            foreach ($response_obj->rows as $row) {
                $author = new stdclass();
                $author->firstname = $row->key[1];
                $author->lastname = $row->key[0];
                $author->name = $author->firstname . ' ' . $author->lastname;
                $obj->results[] = $author;
            }
        }
    }
    api_output($obj, $callback);
}
Beispiel #5
0
function api_converturl_url_output($q)
{
    $gid = $q->field(0, 'gid');
    $url = get_listurl($q);
    $output = array('gid' => $gid, 'url' => 'http://www.openaustralia.org' . $url);
    api_output($output);
}
function _api_getMembers_output($sql, $params)
{
    global $parties;
    $db = new ParlDB();
    $q = $db->query($sql, $params);
    $output = array();
    $last_mod = 0;
    for ($i = 0; $i < $q->rows(); $i++) {
        $pid = $q->field($i, 'person_id');
        $row = array('member_id' => $q->field($i, 'member_id'), 'person_id' => $pid, 'name' => html_entity_decode(member_full_name($q->field($i, 'house'), $q->field($i, 'title'), $q->field($i, 'given_name'), $q->field($i, 'family_name'), $q->field($i, 'lordofname'))), 'party' => isset($parties[$q->field($i, 'party')]) ? $parties[$q->field($i, 'party')] : $q->field($i, 'party'));
        if ($q->field($i, 'house') != 2) {
            $row['constituency'] = $q->field($i, 'constituency');
        }
        $output[$pid] = $row;
        $time = strtotime($q->field($i, 'lastupdate'));
        if ($time > $last_mod) {
            $last_mod = $time;
        }
    }
    $pids = array_keys($output);
    if (count($pids)) {
        $q = $db->query('SELECT person, dept, position, from_date, to_date FROM moffice
            WHERE to_date="9999-12-31" AND person IN (' . join(',', $pids) . ')');
        for ($i = 0; $i < $q->rows(); $i++) {
            $row = $q->row($i);
            $pid = $row['person'];
            unset($row['person']);
            $output[$pid]['office'][] = $row;
        }
    }
    $output = array_values($output);
    api_output($output, $last_mod);
}
Beispiel #7
0
function _api_getHansard_search($array)
{
    $search = isset($array['s']) ? trim($array['s']) : '';
    $pid = trim($array['pid']);
    $type = isset($array['type']) ? $array['type'] : '';
    $search = filter_user_input($search, 'strict');
    if ($pid) {
        $search .= ($search ? ' ' : '') . 'speaker:' . $pid;
    }
    if ($type) {
        $search .= " section:" . $type;
    }
    $o = get_http_var('order');
    if ($o == 'p') {
        $data = search_by_usage($search);
        $out = array();
        foreach ($data['speakers'] as $pid => $s) {
            $out[$pid] = array('house' => $s['house'], 'name' => $s['name'], 'party' => $s['party'], 'count' => $s['count'], 'mindate' => substr($s['pmindate'], 0, 7), 'maxdate' => substr($s['pmaxdate'], 0, 7));
        }
        api_output($out);
        return;
    }
    global $SEARCHENGINE;
    $SEARCHENGINE = new SEARCHENGINE($search);
    #        $query_desc_short = $SEARCHENGINE->query_description_short();
    $pagenum = get_http_var('page');
    $args = array('s' => $search, 'p' => $pagenum, 'num' => get_http_var('num'), 'pop' => 1, 'o' => $o == 'd' || $o == 'r' ? $o : 'd');
    $LIST = new HANSARDLIST();
    $LIST->display('search', $args, 'api');
}
Beispiel #8
0
function api_getBoundary_name($name)
{
    $name = html_entity_decode(normalise_constituency_name($name));
    # XXX
    if (!$name) {
        api_error('Name not recognised');
        return;
    }
    $out = array();
    $areas = _api_cacheCheck('mapit_get_areas_by_type', 'WMC');
    $areas_info = _api_cacheCheck('mapit_get_voting_areas_info', $areas);
    $id = null;
    foreach ($areas_info as $k => $v) {
        if (html_entity_decode(normalise_constituency_name($v['name'])) == $name) {
            $id = $k;
        }
    }
    if (!$id) {
        api_error('No data found for name');
        return;
    }
    $out = mapit_get_voting_area_geometry($id, 'wgs84');
    if (isset($out['polygon'])) {
        api_output($out['polygon']);
    } else {
        api_error('Nothing returned from get_voting_areas_geometry');
    }
}
function api_converturl_url_output($q)
{
    $gid = $q->field(0, 'gid');
    $url = get_listurl($q);
    $output = array('gid' => $gid, 'url' => 'http://www.theyworkforyou.com' . $url);
    api_output($output);
}
Beispiel #10
0
function api_getAlerts_start_date($start_date)
{
    $args = array('start_date' => $start_date, 'end_date' => get_http_var('end_date'));
    $alert = new ALERT();
    $data = $alert->fetch_between($confirmed = 1, $deleted = 0, $args['start_date'], $args['end_date']);
    api_output($data);
}
Beispiel #11
0
function api_getRepresentatives_postcode($pc)
{
    $pc = preg_replace('#[^0-9]#i', '', $pc);
    if (is_postcode($pc)) {
        $constituency = postcode_to_constituency($pc);
        if ($constituency == 'CONNECTION_TIMED_OUT') {
            api_error('Connection timed out');
        } elseif ($constituency) {
            if (is_array($constituency)) {
                $constituencies = $constituency;
            } else {
                $constituencies = array($constituency);
            }
            $output = array();
            foreach ($constituencies as $c) {
                $output[] = _api_getMP_constituency($c);
            }
            api_output($output);
        } else {
            api_error('Unknown postcode');
        }
    } else {
        api_error('Invalid postcode');
    }
}
Beispiel #12
0
 function image()
 {
     $aid = jget('aid', 'int');
     $count = jlogic('image')->albumimgnums($aid, 1);
     $images = jlogic('image')->getallalbumimg($aid, '', 1);
     api_output(array('total' => $count, 'images' => array_merge($images)));
 }
function api_findArticles_invoke($params)
{
    $search = $params['search'];
    if (!$search) {
        api_error("required parameter 'search' is missing");
        return;
    }
    $start = (int) $params['offset'];
    $num = (int) $params['limit'];
    if (!$num) {
        $num = 100;
    }
    if (!$start) {
        $start = 0;
    }
    try {
        $xap = new XapSearch();
        $xap->set_query($search);
        $results = $xap->run($start, $num, 'date');
        //        foreach( $results as &$a ) {
        //            // convert datetime objects to strings
        //            $a['pubdate'] = $a['pubdate']->format('c');
        //        }
        $output = array('results' => $results);
        api_output($output);
    } catch (Exception $e) {
        api_error($e->getMessage());
    }
}
Beispiel #14
0
function api_getGeometry_name($name)
{
    $out = _api_getGeometry_name($name);
    if ($out) {
        api_output($out);
    } else {
        api_error('Name not recognised');
    }
}
function api_getConstituencies_latitude($lat)
{
    $lon = get_http_var('longitude') + 0;
    $d = get_http_var('distance') + 0;
    if (!$lat) {
        api_error('You must supply a latitude and longitude');
        return;
    }
    $out = _api_getConstituencies_latitude($lat, $lon, $d);
    api_output($out);
}
Beispiel #16
0
function display_wkt($wkt, $limit = 200, $callback = '')
{
    global $config;
    global $couch;
    $url = $config['couchdb_options']['prefix'] . $config['couchdb_options']['host'] . '/' . $config['couchdb_options']['database'] . '/_design/geodd/_geo/points?g=' . urlencode($wkt) . '&relation=intersects' . '&include_docs=true' . '&limit=' . $limit;
    //echo $url;
    $json = get($url);
    $obj = json_decode($json);
    $obj->status = 200;
    // trim excess?
    api_output($obj, $callback);
}
function api_getMPsInfo_id($ids) {
	$output = _api_getMPsInfo_id($ids);
	if ($output) {
		if ($output[0]) {
            api_output($output[0], $output[1]);
		} else {
            api_error('Unknown field');
        }
	} else {
		api_error('Unknown person ID');
	}
}
Beispiel #18
0
function api_getMPinfo_id($id)
{
    $fields = preg_split('#\\s*,\\s*#', get_http_var('fields'), -1, PREG_SPLIT_NO_EMPTY);
    $db = new ParlDB();
    $last_mod = 0;
    $q = $db->query("select data_key, data_value, lastupdate from personinfo\n\t\twhere person_id = '" . mysql_escape_string($id) . "'");
    if ($q->rows()) {
        $output = array();
        for ($i = 0; $i < $q->rows(); $i++) {
            $data_key = $q->field($i, 'data_key');
            if (count($fields) && !in_array($data_key, $fields)) {
                continue;
            }
            $output[$data_key] = $q->field($i, 'data_value');
            $time = strtotime($q->field($i, 'lastupdate'));
            if ($time > $last_mod) {
                $last_mod = $time;
            }
        }
        $q = $db->query("select * from memberinfo\n\t\t\twhere member_id in (select member_id from member where person_id = '" . mysql_escape_string($id) . "')\n\t\t\torder by member_id");
        if ($q->rows()) {
            $oldmid = 0;
            $count = -1;
            for ($i = 0; $i < $q->rows(); $i++) {
                $data_key = $q->field($i, 'data_key');
                if (count($fields) && !in_array($data_key, $fields)) {
                    continue;
                }
                $mid = $q->field($i, 'member_id');
                if (!isset($output['by_member_id'])) {
                    $output['by_member_id'] = array();
                }
                if ($oldmid != $mid) {
                    $count++;
                    $oldmid = $mid;
                    $output['by_member_id'][$count]['member_id'] = $mid;
                }
                $output['by_member_id'][$count][$data_key] = $q->field($i, 'data_value');
                $time = strtotime($q->field($i, 'lastupdate'));
                if ($time > $last_mod) {
                    $last_mod = $time;
                }
            }
        }
        ksort($output);
        api_output($output, $last_mod);
    } else {
        api_error('Unknown person ID');
    }
}
function _api_getConstituency_name($constituency)
{
    $db = new ParlDB();
    $q = $db->query("select constituency, data_key, data_value from consinfo\n                     where constituency = :constituency", array(':constituency' => $constituency));
    if ($q->rows()) {
        for ($i = 0; $i < $q->rows(); $i++) {
            $data_key = $q->field($i, 'data_key');
            $output[$data_key] = $q->field($i, 'data_value');
        }
        ksort($output);
    }
    $output['name'] = $constituency;
    api_output($output);
}
Beispiel #20
0
function _api_getMembers_output($sql) {
	$db = new ParlDB;
	$q = $db->query($sql);
	$output = array();
  $last_mod = 0;
  for ($i=0; $i<$q->rows(); $i++) {
    $out = _api_getMP_row($q->row($i));
    $output[] = $out;
    $time = strtotime($q->field($i, 'lastupdate'));
    if ($time > $last_mod)
      $last_mod = $time;
  }
  api_output($output, $last_mod);
}
function _api_getConstituency_name($constituency) {
    $db = new ParlDB;
    $q = $db->query("select constituency, data_key, data_value from consinfo
                     where constituency = '" . mysql_real_escape_string($constituency) . "'");
    if ($q->rows()) {
        for ($i=0; $i<$q->rows(); $i++) {
            $data_key = $q->field($i, 'data_key');
            $output[$data_key] = $q->field($i, 'data_value');
        }
        ksort($output);
    }
    $output['name'] = $constituency;
    api_output($output);

}
Beispiel #22
0
function _api_getPerson_output($q)
{
    $output = array();
    $last_mod = 0;
    for ($i = 0; $i < $q->rows(); $i++) {
        $house = $q->field($i, 'house');
        $out = _api_getPerson_row($q->row($i), $house == HOUSE_TYPE_ROYAL ? false : true);
        $output[] = $out;
        $time = strtotime($q->field($i, 'lastupdate'));
        if ($time > $last_mod) {
            $last_mod = $time;
        }
    }
    api_output($output, $last_mod);
}
function api_getCommittee_name($name) {
	$db = new ParlDB;

	$name = preg_replace('#\s+Committee#', '', $name);

	$date = parse_date(get_http_var('date'));
	if ($date) $date = '"' . $date['iso'] . '"';
	else $date = 'date(now())';
	$q = $db->query("select distinct(dept) from moffice
		where dept like '%" . mysql_real_escape_string($name) . "%Committee'
		and from_date <= " . $date . ' and '
		. $date . ' <= to_date');
	if ($q->rows() > 1) {
		# More than one committee matches
		for ($i=0; $i<$q->rows(); $i++) {
			$output['committees'][] = array(
				'name' => $q->field($i, 'dept')
			);
		}
		api_output($output);
	} elseif ($q->rows()) {
		# One committee
		$q = $db->query("select * from moffice,member
			where moffice.person = member.person_id
			and dept like '%" . mysql_real_escape_string($name) . "%Committee'
			and from_date <= " . $date . ' and ' . $date . " <= to_date
			and entered_house <= " . $date . ' and ' . $date . ' <= left_house');
		if ($q->rows()) {
			$output = array();
			$output['committee'] = $q->field(0, 'dept');
			for ($i=0; $i<$q->rows(); $i++) {
				$member = array(
'person_id' => $q->field($i, 'person'),
'name' => $q->field($i, 'first_name') . ' ' . $q->field($i, 'last_name'),
				);
				if ($q->field($i, 'position') == 'Chairman') {
					$member['position'] = $q->field($i, 'position');
				}
				$output['members'][] = $member;
			}
			api_output($output);
		} else {
			api_error('That committee has no members...?');
		}
	} else {
		api_error('That name was not recognised');
	}
}
Beispiel #24
0
function api_getMPinfo_id($id) {
	if (!ctype_digit($id)) {
		api_error('Unknown person ID');
		return;
	}

	$output = _api_getMPsInfo_id($id);
	if ($output) {
        if ($output[0]) {
		    api_output($output[0][$id], $output[1]);
        } else {
            api_error('Unknown field');
        }
	} else {
		api_error('Unknown person ID');
	}
}
Beispiel #25
0
function api_getconstituency_postcode($pc)
{
    $pc = preg_replace('#[^a-z0-9 ]#i', '', $pc);
    if (validate_postcode($pc)) {
        $constituency = postcode_to_constituency($pc);
        if ($constituency == 'CONNECTION_TIMED_OUT') {
            api_error('Connection timed out');
        } elseif ($constituency) {
            $output['name'] = html_entity_decode($constituency);
            api_output($output);
        } else {
            api_error('Unknown postcode');
        }
    } else {
        api_error('Invalid postcode');
    }
}
function api_getconstituency_postcode($pc) {
	$pc = preg_replace('#[^a-z0-9 ]#i', '', $pc);

  if (get_http_var('future')) {

    $new_areas = mapit_get_voting_areas($pc, 13); # Magic number 13
    if (is_object($new_areas)) { # rabx_is_error throws Notice
        api_error('Unknown postcode, or problem with lookup');
    } elseif (!isset($new_areas['WMC'])) {
        api_error('Unknown postcode, or problem with lookup');
    } else {
        $new_info = mapit_get_voting_area_info($new_areas['WMC']);
        $output['name'] = $new_info['name'];
        api_output($output);
    }

  } else {

	if (validate_postcode($pc)) {
		$constituency = postcode_to_constituency($pc);
		if ($constituency == 'CONNECTION_TIMED_OUT') {
			api_error('Connection timed out');
		} elseif ($constituency) {
                    $db = new ParlDB;
                    $q = $db->query("select constituency, data_key, data_value from consinfo
                                     where constituency = '" . mysql_real_escape_string($constituency) . "'");
                    if ($q->rows()) {
                        for ($i=0; $i<$q->rows(); $i++) {
                            $data_key = $q->field($i, 'data_key');
                            $output[$data_key] = $q->field($i, 'data_value');
                        }
                        ksort($output);
		    }
                    $output['name'] = $constituency;
		    api_output($output);
		} else {
			api_error('Unknown postcode');
		}
	} else {
		api_error('Invalid postcode');
	}

  }
}
Beispiel #27
0
function api_getLord_id($id)
{
    $db = new ParlDB();
    $q = $db->query("select * from member\n\t\twhere house=2 and person_id = '" . mysql_real_escape_string($id) . "'\n\t\torder by left_house desc");
    if ($q->rows()) {
        $output = array();
        $last_mod = 0;
        for ($i = 0; $i < $q->rows(); $i++) {
            $out = _api_getLord_row($q->row($i));
            $output[] = $out;
            $time = strtotime($q->field($i, 'lastupdate'));
            if ($time > $last_mod) {
                $last_mod = $time;
            }
        }
        api_output($output, $last_mod);
    } else {
        api_error('Unknown person ID');
    }
}
function _api_getMembers_output($sql)
{
    global $parties;
    $db = new ParlDB();
    $q = $db->query($sql);
    $output = array();
    $last_mod = 0;
    for ($i = 0; $i < $q->rows(); $i++) {
        $row = array('member_id' => $q->field($i, 'member_id'), 'person_id' => $q->field($i, 'person_id'), 'name' => html_entity_decode(member_full_name($q->field($i, 'house'), $q->field($i, 'title'), $q->field($i, 'first_name'), $q->field($i, 'last_name'), $q->field($i, 'constituency'))), 'party' => isset($parties[$q->field($i, 'party')]) ? $parties[$q->field($i, 'party')] : $q->field($i, 'party'));
        if ($q->field($i, 'house') == 1) {
            $row['constituency'] = html_entity_decode($q->field($i, 'constituency'));
        }
        $output[] = $row;
        $time = strtotime($q->field($i, 'lastupdate'));
        if ($time > $last_mod) {
            $last_mod = $time;
        }
    }
    api_output($output, $last_mod);
}
function api_getMPinfo_id($id)
{
    $db = new ParlDB();
    $last_mod = 0;
    $q = $db->query("select data_key, data_value, lastupdate from personinfo\n\t\twhere person_id = '" . mysql_escape_string($id) . "'");
    if ($q->rows()) {
        $output = array();
        for ($i = 0; $i < $q->rows(); $i++) {
            $output[$q->field($i, 'data_key')] = $q->field($i, 'data_value');
            $time = strtotime($q->field($i, 'lastupdate'));
            if ($time > $last_mod) {
                $last_mod = $time;
            }
        }
        $q = $db->query("select * from memberinfo\n\t\t\twhere member_id in (select member_id from member where person_id = '" . mysql_escape_string($id) . "')");
        if ($q->rows()) {
            $oldmid = 0;
            $count = -1;
            for ($i = 0; $i < $q->rows(); $i++) {
                $mid = $q->field($i, 'member_id');
                if (!isset($output['by_member_id'])) {
                    $output['by_member_id'] = array();
                }
                if ($oldmid != $mid) {
                    $count++;
                    $oldmid = $mid;
                    $output['by_member_id'][$count]['member_id'] = $mid;
                }
                $output['by_member_id'][$count][$q->field($i, 'data_key')] = $q->field($i, 'data_value');
                $time = strtotime($q->field($i, 'lastupdate'));
                if ($time > $last_mod) {
                    $last_mod = $time;
                }
            }
        }
        ksort($output);
        api_output($output, $last_mod);
    } else {
        api_error('Unknown person ID');
    }
}
function api_getconstituency_postcode($pc)
{
    $pc = preg_replace('#[^a-z0-9 ]#i', '', $pc);
    if (!validate_postcode($pc)) {
        api_error('Invalid postcode');
        return;
    }
    if (get_http_var('future')) {
        $xml = simplexml_load_string(file_get_contents(POSTCODE_API_URL . urlencode($pc)));
        if (!$xml || $xml->error) {
            api_error('Unknown postcode, or problem with lookup');
            return;
        }
        $output['name'] = iconv('utf-8', 'iso-8859-1//TRANSLIT', (string) $xml->future_constituency);
        api_output($output);
    } else {
        $constituency = postcode_to_constituency($pc);
        if ($constituency == 'CONNECTION_TIMED_OUT') {
            api_error('Connection timed out');
            return;
        }
        if (!$constituency) {
            api_error('Unknown postcode');
            return;
        }
        $db = new ParlDB();
        $q = $db->query("select constituency, data_key, data_value from consinfo\n                         where constituency = '" . mysql_real_escape_string($constituency) . "'");
        if ($q->rows()) {
            for ($i = 0; $i < $q->rows(); $i++) {
                $data_key = $q->field($i, 'data_key');
                $output[$data_key] = $q->field($i, 'data_value');
            }
            ksort($output);
        }
        $output['name'] = $constituency;
        api_output($output);
    }
}