192 lines
5.6 KiB
PHP
192 lines
5.6 KiB
PHP
<?php
|
|
/*
|
|
bboschecker 0.1 - check for new BB device OS releases
|
|
Copyright (C) 2007 troyengel
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
http://www.gnu.org/licenses/gpl-2.0.txt
|
|
*/
|
|
|
|
// where is the list of carriers?
|
|
$BBF_LIST = "http://blackberryfaq.com/index.php/BlackBerry_Operating_System_Downloads";
|
|
|
|
// we will delay this many seconds when retrieving pages from the
|
|
// RIM server, we don't want to be a bad netizen.
|
|
$RIM_SLEEP = 1;
|
|
|
|
// the common download entry point (saves on useless parsing)
|
|
$RIM_DLURL = "https://www.blackberry.com/Downloads/browseSoftware.do";
|
|
|
|
// the user agent we'll masquerade as
|
|
$SCRIPT_UA = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
|
|
|
|
// where to store the session cookiejar
|
|
$SCRIPT_CJ = "/tmp/bbos_cookies";
|
|
?>
|
|
|
|
<html>
|
|
<head>
|
|
<title>BlackBerry Device OS Checker</title>
|
|
</head>
|
|
<body>
|
|
|
|
<h3>BlackBerry Device OS Checker</h3>
|
|
|
|
<?php
|
|
|
|
// we need to set this globally and pass it around so that the session
|
|
// and cookie jar work as a cohesive unit
|
|
$curl_handle = curl_init();
|
|
curl_setopt($curl_handle, CURLOPT_USERAGENT, $SCRIPT_UA);
|
|
curl_setopt($curl_handle, CURLOPT_HEADER, FALSE);
|
|
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, TRUE);
|
|
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
|
|
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
|
|
curl_setopt($curl_handle, CURLOPT_COOKIEFILE, $SCRIPT_CJ);
|
|
curl_setopt($curl_handle, CURLOPT_COOKIEJAR, $SCRIPT_CJ);
|
|
|
|
function getPage($url, $method="GET", $postfields="") {
|
|
global $curl_handle;
|
|
if (!is_string($url)) {
|
|
return "";
|
|
} else {
|
|
curl_setopt($curl_handle, CURLOPT_URL, $url);
|
|
if ($method == "POST") {
|
|
curl_setopt($curl_handle, CURLOPT_POST, TRUE);
|
|
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $postfields);
|
|
} else {
|
|
curl_setopt($curl_handle, CURLOPT_POST, FALSE);
|
|
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "");
|
|
}
|
|
|
|
$output = "";
|
|
$output = @curl_exec($curl_handle);
|
|
|
|
if (curl_errno($curl_handle)) {
|
|
print curl_error($curl_handle);
|
|
return "";
|
|
}
|
|
|
|
if (!is_string($output) || !strlen($output)) {
|
|
echo "Failure Contacting Server";
|
|
return "";
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
}
|
|
|
|
if (isset($_REQUEST['device']) && is_numeric($_REQUEST['device'])) {
|
|
|
|
$device = $_REQUEST['device'];
|
|
// IE hack - it buffers and won't display unless 256b
|
|
print(str_repeat(" ", 300) . "\n");
|
|
|
|
echo "Downloading carrier list from BlackBerryFAQ... ";
|
|
flush();
|
|
$carriers = getPage($BBF_LIST);
|
|
echo "<b>done</b>.<br>\n";
|
|
flush();
|
|
|
|
echo "Parsing carrier list for links... ";
|
|
flush();
|
|
$link_array = array();
|
|
$cnt_array = explode("\n", $carriers);
|
|
foreach ($cnt_array as $line) {
|
|
if (stristr($line, "www.blackberry.com")) {
|
|
// http://www.the-art-of-web.com/php/parse-links/
|
|
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
|
|
if (preg_match_all("/$regexp/siU", $line, $matches, PREG_SET_ORDER)) {
|
|
foreach ($matches as $match) {
|
|
# $match[2] = link address
|
|
# $match[3] = link text
|
|
$link_array[$match[2]] = $match[3];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
echo "<b>done</b>.<br><br>\n";
|
|
flush();
|
|
|
|
echo "Searching for OS releases for the BlackBerry <b>$device</b><br><br>\n";
|
|
flush();
|
|
reset($link_array);
|
|
while (list($link, $title) = each($link_array)) {
|
|
echo "Checking <a href=\"$link\"><b>$title</b></a>...<br>\n";
|
|
flush();
|
|
$rim_page = getPage($link);
|
|
$rim_array = explode("\n", $rim_page);
|
|
$got_v = 0;
|
|
$got_c = 0;
|
|
$value = "";
|
|
$code = "";
|
|
foreach ($rim_array as $line) {
|
|
// get the value
|
|
if (stristr($line, $device)) {
|
|
$regexp = "<option\svalue=\"([^\"]*)\">(.*)<\/option>";
|
|
if (preg_match("/$regexp/siU", $line, $match)) {
|
|
$got_v = 1;
|
|
$value = $match[1];
|
|
}
|
|
}
|
|
// get the code
|
|
if (stristr($line, "type=\"hidden\" name=\"code\"")) {
|
|
$regexp = "value=\"([^\"]*)\"(.*)";
|
|
if (preg_match("/$regexp/siU", $line, $match)) {
|
|
$got_c = 1;
|
|
$code = $match[1];
|
|
}
|
|
}
|
|
}
|
|
if ($got_v && $got_c) {
|
|
echo " Found one, retrieving product page...<br>\n";
|
|
flush();
|
|
$postvars = "productName=$value&code=$code";
|
|
$os_page = getPage($RIM_DLURL, "POST", $postvars);
|
|
$os_array = explode("\n", $os_page);
|
|
foreach ($os_array as $osline) {
|
|
if (stristr($osline, "Applications:")) {
|
|
$result = preg_replace("/<(.*)>/siU", "", $osline);
|
|
echo " <b>$result</b><br>\n";
|
|
}
|
|
}
|
|
}
|
|
sleep($RIM_SLEEP);
|
|
}
|
|
|
|
echo "<br><b>All done!</b><br>\n";
|
|
|
|
} else {
|
|
?>
|
|
|
|
Enter the model number ONLY of the device.<br>
|
|
(7290, 8100, 8320, 8800, etc.)<br>
|
|
<form name="deviceselect" method="GET" action="<?php $_PHP_SELF; ?>">
|
|
<br>
|
|
<input type="text" size="10" name="device">
|
|
<input type="submit" value="Search Carriers">
|
|
</form>
|
|
|
|
<b>Note</b>: This tool will only search carriers who<br>
|
|
host their downloads on www.blackberry.com<br>
|
|
|
|
<?php
|
|
} // device
|
|
curl_close($curl_handle);
|
|
?>
|
|
|
|
<br>
|
|
Code: <a href="https://github.com/troyengel/bboschecker">bboschecker on github</a><br>
|
|
Released under the <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2 license</a><br>
|
|
</body>
|
|
</html>
|
|
|