Enable labs link; myway balance viewer
[busui.git] / labs / myway_api.json.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
function cleanString($subject)
{
        $subject = str_replace("&nbsp;", " ", $subject);
        $subject = str_replace("&", "&amp;", $subject);
        $subject = preg_replace('/[^\r\n\t\x20-\x7E\xA0-\xFF]/', '', $subject);
        $subject = str_replace("  ", " ", $subject);
        return trim($subject);
}
$return = Array();
/*if (file_exists("mywayresponse.txt")) {
        @$fh = fopen("mywayresponse.txt", 'r');
        if ($fh) {
                $pageHTML = fread($fh, filesize("mywayresponse.txt"));
                fclose($fh);
        }
}*/
//set POST variables
$url = 'https://www.action.act.gov.au/ARTS/use_Funcs.asp';
$field_mapping = Array(
        "card_number" => "SRNO",
        "DOBmonth" => "month",
        "DOBday" => "day",
        "DOByear" => "year",
        "secret_answer" => "pwrd",
        "button" => "button"
);
foreach (Array(
        "card_number",
        "DOBday",
        "DOBmonth",
        "DOByear"
) as $field_name) {
        if (isset($_REQUEST[$field_name])) {
                $fields[$field_name] = filter_var($_REQUEST[$field_name], FILTER_SANITIZE_NUMBER_INT);
        }
        else {
                $return["error"][] = $field_name. " parameter invalid or unspecified";
        }
}
if (isset($_REQUEST['secret_answer'])) {
        $fields['secret_answer'] = filter_var($_REQUEST['secret_answer'], FILTER_SANITIZE_STRING, Array(
                FILTER_FLAG_NO_ENCODE_QUOTES,
                FILTER_FLAG_STRIP_HIGH,
                FILTER_FLAG_STRIP_LOW
        ));
}
else {
        $return["error"][] = "secret_answer parameter invalid or unspecified";
}
$fields['button'] = 'Submit';
$fields_string = "";
//url-ify the data for the POST
foreach ($fields as $key => $value) {
        if (sizeof($value) === 0) $return['error'][] = $key . " parameter invalid or unspecified";
        $fields_string.= $field_mapping[$key] . '=' . $value . '&';
}
$fields_string = rtrim($fields_string, '&');
if (!isset($return['error'])) {
        //open connection
        $ch = curl_init();
        //set the url, number of POST vars, POST data
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, count($fields));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        //execute post
        $pageHTML = curl_exec($ch);
        if (curl_errno($ch)) $return["error"][] = "Network error " . curl_errno($ch) . " " . curl_error($ch) . " " . $url . $fields_string;
        //close connection
        curl_close($ch);
}
 
if (!isset($return['error'])) {
        include_once ('simple_html_dom.php');
        $page = str_get_html($pageHTML);
        $pageAlerts = $page->find(".smartCardAlert");
        if (sizeof($pageAlerts) > 0) {
                $return['error'][] = $pageAlerts[0]->plaintext;
        }
        if (!isset($return['error'])) {
                $tableNum = 0;
                $tableName = Array(
                        1 => "myway_carddetails",
                        2 => "myway_transactions"
                );
                foreach ($page->find("table") as $table) {
                        $tableNum++;
                        $tableColumns = Array();
                        $tableColumnNum = 0;
                        foreach ($table->find("th") as $th) {
                                $tableColumns[$tableColumnNum] = cleanString($th->plaintext);
                                $tableColumnNum++;
                        }
                        $tableRowNum = 0;
                        foreach ($table->find("tr") as $tr) {
                                $tableColumnNum = 0;
                                foreach ($tr->find("td") as $td) {
                                        if ($tableNum == 1) $return[$tableName[$tableNum]][$tableColumns[$tableColumnNum]] = cleanString($td->plaintext);
                                        else $return[$tableName[$tableNum]][$tableRowNum][$tableColumns[$tableColumnNum]] = cleanString($td->plaintext);
                                        $tableColumnNum++;
                                }
                                $tableRowNum++;
                        }
                }
        }
}
if (sizeof($return) == 0) {
$return['error'][] = "No data extracted from MyWay website - API may be out of date";
}
 
header('Content-Type: text/javascript; 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 = '(' . json_encode($return) . ');'; //must wrap in parens and end with semicolon
        print_r($_GET['callback'] . $json); //callback is prepended for json-p
        
}
else echo json_encode($return);
?>