View Single Post
  (#2 (permalink)) Old
rivviepop Offline
BlackBerry Extraordinaire
 
rivviepop's Avatar
 
Posts: 2,166
Join Date: Dec 2006
Location: san francisco
Model: 8320
PIN: n/a
Carrier: t-mobile
Default 11-07-2007, 11:23 PM

Here's the code in a standard 'code' block here on the forum, in case you just wanna read it and stuff. ph34r my PHP skillz.

bboschecker.php
PHP Code:
<?php
/*
    bboschecker 0.1 - check for new BB device OS releases
    Copyright (C) 2007 rivviepop (blackberryforums.com)

    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_handleCURLOPT_USERAGENT$SCRIPT_UA);
curl_setopt($curl_handleCURLOPT_HEADERFALSE);
curl_setopt($curl_handleCURLOPT_FOLLOWLOCATIONTRUE);
curl_setopt($curl_handleCURLOPT_SSL_VERIFYPEERFALSE);
curl_setopt($curl_handleCURLOPT_RETURNTRANSFERTRUE);
curl_setopt($curl_handleCURLOPT_COOKIEFILE$SCRIPT_CJ);
curl_setopt($curl_handleCURLOPT_COOKIEJAR$SCRIPT_CJ);

function 
getPage($url$method="GET"$postfields="") {
  global 
$curl_handle;
  if (!
is_string($url)) {
    return 
"";
  } else {
    
curl_setopt($curl_handleCURLOPT_URL$url);
    if (
$method == "POST") {
      
curl_setopt($curl_handleCURLOPT_POSTTRUE);
      
curl_setopt($curl_handleCURLOPT_POSTFIELDS$postfields);
    } else {
      
curl_setopt($curl_handleCURLOPT_POSTFALSE);
      
curl_setopt($curl_handleCURLOPT_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$matchesPREG_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 
"&nbsp;&nbsp;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 
"&nbsp;&nbsp;&nbsp;&nbsp;<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 by <a href="http://www.blackberryforums.com/member.php?u=82101">rivviepop on BlackBerryForums</a><br>
Released under the <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2 license</a><br>
</body>
</html>
   
Reply With Quote