BlackBerryForums.com : Your Number One BlackBerry Community      

»Sponsored Links



Reply
 
LinkBack Thread Tools
  (#1 (permalink)) Old
rivviepop Offline
BlackBerry Extraordinaire
 
rivviepop's Avatar
 
Posts: 2,139
Join Date: Dec 2006
Location: san francisco
Model: 8320
PIN: n/a
Carrier: t-mobile
Default bboschecker - check for new blackberry device OS versions (open source, php) - 11-07-2007, 10:17 PM

Update = version 0.2 released, new thread here:
http://www.blackberryforums.com/gene...d-checker.html

===

Today I whipped up some PHP code that will scrape the OS downloads page from the FAQ (BlackBerry Operating System Downloads - BlackBerryFAQ) and do all the hard work of finding OS releases for your device. The code is released under the GPLv2, fixes and additions welcome. PM me, post here, whatever - so long as you abide by the spirit and law of the GPL license. Open Source for the win.

Download: Index of /code/ (click on ZIP file to download)

NOTE: an online, working version of this is NOT provided, it might lead to abuse of the RIM download servers if a kabillion people try and use it at once. You need to download and run on your own webserver (which isn't hard, it's one whole PHP file with nothing to configure - it either works or it doesn't). If you want to run this on Windows you will need to change one setting at the top (location of a temp file to store web cookies).

The quick one-two punch: simply load the PHP script in your Firefox from your PHP webserver and you're greeted with this:



Put in your device model desired and click Search, let it crank and it looks like this:



See an OS you'd like to read more about, just click on the provided carrier link and you're off and running! It couldn't be more simple to use.

If it feels "slow" loading each carrier page, this is on purpose! I built in a one second (configurable) pause between each page fetch from the RIM servers. It is in our best interest to fly under the radar and not abuse RIM's servers with a tool like this. It is highly suggested you do not lower this value - in fact, increase it if possible on your server.

TODO: add the ability to specify the network type (i.e. search CDMA only), currently the way the line breaks are in the FAQ page code would make this harder than the 10 minutes I want to spend coding it.

Blog post: bboschecker.php - check BlackBerry device OS releases « rivviepop phantom

Last edited by rivviepop : 05-11-2008 at 06:25 PM. Reason: new version, thread
   
Reply With Quote
Sponsored Links
Please Login or Register to Remove these Advertisements!

  (#2 (permalink)) Old
rivviepop Offline
BlackBerry Extraordinaire
 
rivviepop's Avatar
 
Posts: 2,139
Join Date: Dec 2006
Location: san francisco
Model: 8320
PIN: n/a
Carrier: t-mobile
Default 11-07-2007, 10: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
  (#3 (permalink)) Old
mrking Offline
Thumbs Must Hurt
 
mrking's Avatar
 
Posts: 172
Join Date: Oct 2007
Model: 8310
OS: v 4.5
PIN: N/A
Carrier: Rogers
Default 11-07-2007, 11:44 PM

The download link on your blog takes me here....

Free Hostia: domain hosting and web hosting service

I just copy pasted code from your second post.

Last edited by mrking : 11-07-2007 at 11:47 PM.
   
Reply With Quote
  (#4 (permalink)) Old
rivviepop Offline
BlackBerry Extraordinaire
 
rivviepop's Avatar
 
Posts: 2,139
Join Date: Dec 2006
Location: san francisco
Model: 8320
PIN: n/a
Carrier: t-mobile
Default 11-07-2007, 11:58 PM

Quote:
Originally Posted by mrking View Post
The download link on your blog takes me here....
Free Hostia: domain hosting and web hosting service
I just copy pasted code from your second post.
darn them! thanks a lot, I just edited the post to show how I did it and it works well enough. apparently Freehostia intercepts direct ZIP links from an offsite server (referer) but doesn't when you click on one from the directory browse.
   
Reply With Quote
  (#5 (permalink)) Old
Malkier Offline
Talking BlackBerry Encyclopedia
 
Malkier's Avatar
 
Posts: 262
Join Date: Feb 2007
Model: 8310
Carrier: ALL
Default 11-08-2007, 12:10 AM

Excellent idea, looks great.
Glad to see you placed a pause between page fetches. Respect is always good.

Thanks Rivviepop
   
Reply With Quote
  (#6 (permalink)) Old
dietcoke Offline
Talking BlackBerry Encyclopedia
 
dietcoke's Avatar
 
Posts: 248
Join Date: Apr 2007
Model: dCoke
Carrier: o2
Default 11-22-2007, 07:26 PM

cant this find os 4.3?
   
Reply With Quote
  (#7 (permalink)) Old
ezrunner Offline
BlackBerry Mensa
 
ezrunner's Avatar
 
Posts: 9,366
Join Date: Mar 2006
Location: Virginia Beach
Model: 8800
OS: DOS 3.1
PIN: INK STICK
Carrier: Pony express
Default 11-22-2007, 08:13 PM

Wirelessly posted (BlackBerry8700/4.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/100)

Sweeet rivvie

Nice work!


8800,8100 member#38470
AT&T Mobility Sales
Semper Fi
TroyDBrown is CHAD!!!!
"I am not only Chad I am a Google Search Bot" TroyDBrown
   
Reply With Quote
  (#8 (permalink)) Old
John Clark Offline
BBF Nutjob Mod
 
John Clark's Avatar
 
Posts: 30,509
Join Date: Jun 2005
Model: 8320
OS: 4.5.0.xx
PIN: >Options >Status
Carrier: TMobile
Default 11-22-2007, 08:27 PM

since I don't know much about php and/or setting up web pages I never figured out how to run this....yep, I'm a newbie in this dept.
   
Reply With Quote
  (#9 (permalink)) Old
paulbblc Offline
BBF Moderator. Nah mean?
 
paulbblc's Avatar
 
Posts: 3,543
Join Date: Oct 2005
Location: Twin Cities, MN
Model: Curve
OS: 4.5.0.XX
PIN: 8675309
Carrier: AT&T
Default 11-22-2007, 08:58 PM

Quote:
Originally Posted by dietcoke View Post
cant this find os 4.3?
Please tell me you're just kidding... please.

Nice work Rivvie!
   
Reply With Quote
  (#10 (permalink)) Old
rivviepop Offline
BlackBerry Extraordinaire
 
rivviepop's Avatar
 
Posts: 2,139
Join Date: Dec 2006
Location: san francisco
Model: 8320
PIN: n/a
Carrier: t-mobile
Default 11-22-2007, 11:18 PM

Quote:
Originally Posted by John Clark View Post
since I don't know much about php and/or setting up web pages I never figured out how to run this....yep, I'm a newbie in this dept.
As far as PHP goes, getting this to run is super simple as long as your Apache/PHP setup is of the more standard variety. For instance a Fedora/Red Hat/CentOS based install - out of the box, no modifications - will run it perfectly, it's what I use.

The one feature which it uses is the 'cURL' stuff; this *might* not be pre-compiled in on all instances which could be a stumbling block. It's part of PHP that hooks in to an external library, you'll have to look at your server (or even desktop, this could run under a basic setup) to find out yes or no. cURL is an advanced HTTP program/library that offers features which I use.
   
Reply With Quote
  (#11 (permalink)) Old
John Clark Offline
BBF Nutjob Mod
 
John Clark's Avatar
 
Posts: 30,509
Join Date: Jun 2005
Model: 8320
OS: 4.5.0.xx
PIN: >Options >Status
Carrier: TMobile
Default 11-22-2007, 11:23 PM

Oh, dear....I'm going to have to go back to school.

You're so far over my head I've got Athlete's Scalp!

Last edited by John Clark : 11-22-2007 at 11:25 PM.
   
Reply With Quote
  (#12 (permalink)) Old
rivviepop Offline
BlackBerry Extraordinaire
 
rivviepop's Avatar
 
Posts: 2,139
Join Date: Dec 2006
Location: san francisco
Model: 8320
PIN: n/a
Carrier: t-mobile
Default 11-22-2007, 11:34 PM

Quote:
Originally Posted by John Clark View Post
Oh, dear....I'm going to have to go back to school.
You're so far over my head I've got Athlete's Scalp!
Put me in the c.ockpit of one of your planes and our roles are reversed. "oh look, shiny!" *push* *flip*


Last edited by rivviepop : 11-22-2007 at 11:35 PM. Reason: stupid swearing filter
   
Reply With Quote
  (#13 (permalink)) Old
Keebler Offline
Talking BlackBerry Encyclopedia
 
Keebler's Avatar
 
Posts: 221
Join Date: Apr 2006
Location: Rio Rancho, NM
Model: 8100
OS: 4.5.0.55
PIN: 2437CF91
Carrier: TMO
Default 11-23-2007, 07:53 AM

Nice work rivvie, I was wondering when someone might do this



2437CF91
Rocking the 8100
   
Reply With Quote
  (#14 (permalink))