I'm surprised the "Please God, Now" didn't work, but it really does seem to be broken. Maybe by the same website change that broke the rating, but wasn't noticed. I wonder if we can devise a test to determine whether the plugin is fully functional at any point in time.
Quick sanity check for rating:
if ( Rating = FloatToStr(StrToFloat(Rating)) then
we have a usable rating
else
the script is broken or you need to check if there is a reason there is no rating...not enough user ratings submitted for example
Test:
Rating = '', conversion results in '0.0' ... not equal, bad rating
Rating = 'some text value', conversion results in '0.0'...not equal, bad rating
Rating = '1.0', conversion results in '1.0', equal, good rating
With a bad rating value, the script should not even attempt to add one to the database. In silent mode there isn't much that can be done, but a showmessage('rating not acquired...' + reason ) could be displayed in 'user' mode.
Any time a valid value is 'missed', it should be considered that the parsing may need to be done at a lower level. For example:
<td>rating</td>
changes to
<td class='rating'>rating</td>
If you were using <td> as the start of text indicator, then you'd consider using <td, then parse until you found the matching '>', at which point you'd have the start of text position, you could look for the text termination character sequence.
Writing this type of code for every value is possible, but very time consuming, and since code (to my knowledge) is not sharable between program (ie. #include common_routines.psf) you'd have to change every program that used it when changes were made. When you consider the shear volume of code involved in this project, it's easy to understand why this hasn't been done.