TiVo Community
TiVo Community
TiVo Community
Go Back   TiVo Community > Underground Playground > TiVo Underground
TiVo Community
Reply
Forum Jump
 
Thread Tools
Old 05-01-2011, 06:06 PM   #61
ckrames1234
Registered User
 
Join Date: May 2011
Posts: 4
Yeah, it's not dead anymore :P

Last edited by ckrames1234 : 05-02-2011 at 06:28 PM.
ckrames1234 is offline   Reply With Quote
Old 05-01-2011, 06:17 PM   #62
innocentfreak
Registered User
 
Join Date: Aug 2001
Location: Florida
Posts: 8,404
Quote:
Originally Posted by orangeboy View Post
I haven't even looked at python code for months. Christmas break did just that: it broke my habit of further development...
Lol just figured I would give you crap over it no worries.
__________________
1 - TiVo Roamio Pro
2 - TiVo Premiere XL

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
innocentfreak is offline   Reply With Quote
Old 05-01-2011, 06:25 PM   #63
unitron
Registered User
 
unitron's Avatar
 
Join Date: Apr 2006
Location: semi-coastal NC
Posts: 12,400
Quote:
Originally Posted by orangeboy View Post
Awesome first post!
ckrames1234 also seems to be breathing a little new life into the "other forum" as well.
__________________
(thisismysigfile)


"I am altering the deal. Pray I don't alter it any further."

Darth TiVo, 14 February, 2011
unitron is offline   Reply With Quote
Old 06-05-2011, 08:11 PM   #64
arantius
Registered User
 
Join Date: Jul 2009
Posts: 60
Wow. I should have checked back here earlier. Here's the post I was about to write elsewhere, and the details I've found (more in my next reply):
----------------------------------------------

There's two parts to my story, one happy and one sad.

Happy: I spent a bit of time, a while back, trying and failing to decode the protocol that the iPad app uses to communicate with the TiVo. I tried again this weekend and succeeded! Details will follow below.

Sad: because I had spend so long not using my iPad (having switched to a Xoom, and keeping the iPad around only because I wanted to get back to figuring this out, so I could write an Android equivalent) the TiVo app on it was still version 1.1, with an upgrade to 1.2 available. I did this work before upgrading, then clicked the 'upgrade all' button. Bad idea. Version 1.2 of the iPad app speaks something different, which I can't decode yet. (Edit: removed call for old apps -- previous problems seem to be user error on my part!) Who knows how long this version will continue to work, given that it changed between 1.1 and 1.2? Hopefully forever. Anyway:

Protocol details, for iPad app version 1.1:
  • The iPad discovers the TiVo with mDNS.
  • The iPad then connects to port 1393.
  • It does so over SSL so the data is impossible to sniff.
(With 1.2, it connects on port 1413, which still appears to be SSL, but somehow changed. Perhaps it's validating certificates?)
Previous attempts to reverse engineer with only tcpdump have seemed to stop here. Bummer!

But I managed to forge some mDNS replies so that the iPad app connected to my desktop instead (this still works with 1.2 -- see https://gist.github.com/1009602#file...ivo_forgery.py) and used TcpCatcher as a man-in-the middle to decrypt the SSL (this part has failed for me so far with version 1.2).

The result is this proof-of-concept script: https://gist.github.com/1009602#file_remote.py
Open up TiVo search with something playing in the corner and run this script. It will pause the video, type "typed via remote" into the search box, and unpause the video. (Or, at least it does for me.)

Here's both these scripts, plus all the RPCs I managed to dump (with my MAK and TSN stripped -- hope I didn't leave anything else that's too sensitive). As mentioned above, I can't dump any more because I no longer have version 1.1 of the iPad app, and would love it if anyone could help me get it back in case I missed anything.
http://www.mediafire.com/?z40dci9756a7vh7

Last edited by arantius : 06-06-2011 at 10:39 PM.
arantius is offline   Reply With Quote
Old 06-05-2011, 08:15 PM   #65
arantius
Registered User
 
Join Date: Jul 2009
Posts: 60
Quote:
Originally Posted by ckrames1234 View Post
The TiVo uses the MRPC (MindRPC) protocol. I, being an Objective-C hacker, actually went as far as to disable SSL inside the app's binary, and although this disables the app from working, I captured the first request it sends to the TiVo, unencrypted:
Is MRPC or MindRPC something you've ever heard of before, or just something you figured out based on context?

Could you perhaps provide the dumps-the-requests binary (my iPad is jailbroken)? This would be likely painful, but enough to continue if it does turn out that I missed some important request types.
arantius is offline   Reply With Quote
Old 06-06-2011, 07:08 PM   #66
arantius
Registered User
 
Join Date: Jul 2009
Posts: 60
Nevermind! TcpCatcher was just being a pain. It is still possible to SSL man-in-the-middle version 1.2 of the app, as:

Edit: see the .zip posted later.

Last edited by arantius : 06-10-2011 at 09:59 AM.
arantius is offline   Reply With Quote
Old 06-06-2011, 07:19 PM   #67
moyekj
Registered User
 
Join Date: Jan 2006
Location: Mission Viejo, CA
Posts: 8,497
Good stuff arantius, thanks for posting!
Have you captured something more interesting, such as deleting a show from the Premiere via the iPad? Sending characters/numbers can already be handled with telnet based remote so to me is not as interesting to discover, though of course makes for a good repeatable prototype.
__________________
Roamio Pro (GigE)
Elite (MoCA)
Premiere (MoCA adapter)
Cox - Motorola CableCards & TAs
Slingbox 350 via TiVo Mini & TiVo Stream for remote viewing

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
moyekj is offline   Reply With Quote
Old 06-06-2011, 09:54 PM   #68
orangeboy
yes, I AM orangeboy!
 
Join Date: Apr 2004
Location: Moline, IL
Posts: 4,075
There's some interesting captures in the tcp dump:
{"type":"tunerConflictEventRegister"}
__________________

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
orangeboy is offline   Reply With Quote
Old 06-06-2011, 10:42 PM   #69
arantius
Registered User
 
Join Date: Jul 2009
Posts: 60
Quote:
Originally Posted by moyekj View Post
Good stuff arantius, thanks for posting!
Have you captured something more interesting, such as deleting a show from the Premiere via the iPad?
Yes, download the linked zip. It's chock full of all sorts of kinds of requests and responses. I'm hoping to sort through it all and try to get it documented, so I don't have to keep referring to the raw data. That might be a really big task.

Also as mentioned, I realized I can monitor app 1.2's traffic as well, which appears to be similar but critically different in just enough ways to be a pain.
arantius is offline   Reply With Quote
Old 06-07-2011, 10:08 AM   #70
arantius
Registered User
 
Join Date: Jul 2009
Posts: 60
Some protocol v2 requests/responses, as from iPad app version 1.2:
http://www.mediafire.com/?636hz9tb09e26ws
arantius is offline   Reply With Quote
Old 06-11-2011, 12:42 PM   #71
moyekj
Registered User
 
Join Date: Jan 2006
Location: Mission Viejo, CA
Posts: 8,497
arantius, I finally had a little time this morning to play around with this a little and want to re-iterate thanks for your work on this. I was able to get your prototype working and tried some additional things. For others monitoring this thread, an example of a cool application of this remote:

Jump to a specific location in currently playing program, example:
RpcRequest('videoPlaybackPositionSet', offset=400000)

The above request always jumps to specific offset from start of program given, so you can immediately jump to specific point in a program for advanced navigation controls.

Haven't yet figured out how to delete a specific program directly, but something worth exploring further along with some other things.

One little obstacle I ran into was I didn't have the 'simplejson' python module, but a quick Google search identified where I could download that from, and I just installed in same dir as the remote.py module.

Thanks again!
__________________
Roamio Pro (GigE)
Elite (MoCA)
Premiere (MoCA adapter)
Cox - Motorola CableCards & TAs
Slingbox 350 via TiVo Mini & TiVo Stream for remote viewing

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
moyekj is offline   Reply With Quote
Old 06-11-2011, 05:09 PM   #72
wmcbrine
Resistance Useless
 
wmcbrine's Avatar
 
Join Date: Aug 2003
Posts: 8,751
"simplejson" I think is the same as "json" in the standard library as of Python 2.6.
__________________

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
wmcbrine is offline   Reply With Quote
Old 06-11-2011, 05:34 PM   #73
moyekj
Registered User
 
Join Date: Jan 2006
Location: Mission Viejo, CA
Posts: 8,497
Note that the 'offset' argument of 'videoPlaybackPositionSet' is the time you want to jump to in milliseconds. i.e. To jump to 5 minute mark it would be 60*1000*5. i.e. It's easy to jump exactly to any point in a program that you want.

One can use 'videoPlaybackInfoEventRegister' to get current position information. So based on the above 2 it's simple to implement a simple means of jumping forwards/backwards n minutes with a slight modification to the Key method in remote.py. Below is a sample implementation (with no error checking at all, but just for proof of concept):
Code:
  def Key(self, key, offset=0):
    """Send a key.

    Supported:
      Letters 'a' through 'z'.
      Numbers '0' through '1'.
      Named keys:
        actionA, actionB, actionC, actionD, advance, channelDown,
        channelUp, clear, down, enter, forward, guide, info, left, liveTv,
        pause, play, record, replay, reverse, right, select, slow,
        thumbsDown, thumbsUp, tivo, up, zoom
    """
    if key == ' ':
      key = 'forward'
    elif key == 'jump':
      result = self.Key('position')
      pos = int(result['response']['position'])
      pos += 60000*offset
      req = RpcRequest('videoPlaybackPositionSet', offset=pos)
    elif key == 'position':
      req = RpcRequest('videoPlaybackInfoEventRegister', throttleDelay=1000)
    elif key.lower() in 'abcdefghijklmnopqrstuvwxyz':
      req = RpcRequest('keyEventSend', event='ascii', value=ord(key))
    elif key in '0123456789':
      req = RpcRequest('keyEventSend', event='num' + key)
    else:
      req = RpcRequest('keyEventSend', event=key)

    self.Write(req)
    result = self.Read()
    return result
Then as examples the following work:

# Jump 5 minutes ahead
remote.Key('jump', offset=5)

# Jump 7 minutes backwards
remote.Key('jump', offset=-7)

i.e. There seems to be enough uncovered already to mimic telnet based remotes as well as adding additional functionality such as above.
__________________
Roamio Pro (GigE)
Elite (MoCA)
Premiere (MoCA adapter)
Cox - Motorola CableCards & TAs
Slingbox 350 via TiVo Mini & TiVo Stream for remote viewing

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
moyekj is offline   Reply With Quote
Old 06-11-2011, 07:32 PM   #74
orangeboy
yes, I AM orangeboy!
 
Join Date: Apr 2004
Location: Moline, IL
Posts: 4,075
Quote:
Originally Posted by arantius View Post
...Open up TiVo search with something playing in the corner and run this script. It will pause the video, type "typed via remote" into the search box, and unpause the video. (Or, at least it does for me.)
Well, after actually reading the instructions above, yep, "typed via remote" shows up for me, too!

Quote:
Originally Posted by wmcbrine View Post
"simplejson" I think is the same as "json" in the standard library as of Python 2.6.
Indeed it is (2.6.6). And in 2.7.0 and 2.7.1.

Quote:
Originally Posted by moyekj View Post
Note that the 'offset' argument of 'videoPlaybackPositionSet' is the time you want to jump to in milliseconds. i.e. To jump to 5 minute mark it would be 60*1000*5. i.e. It's easy to jump exactly to any point in a program that you want.

One can use 'videoPlaybackInfoEventRegister' to get current position information. So based on the above 2 it's simple to implement a simple means of jumping forwards/backwards n minutes with a slight modification to the Key method in remote.py...
I haven't looked into all the arguments, but did you notice if there's a 'videoPlaybackEnd' (or something similar) that represents total duration? I'm thinking of a horizontal scroll bar, representing 0 to <end> that mimics the iPad scrub. No clue if the two could be tied together somehow.
__________________

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
orangeboy is offline   Reply With Quote
Old 06-11-2011, 08:33 PM   #75
moyekj
Registered User
 
Join Date: Jan 2006
Location: Mission Viejo, CA
Posts: 8,497
OK, another good one. Once you get hold of a recording id you can issue a "play" request as follows:

Code:
req = RpcRequest('uiNavigate', uri='x-tivo:classicui:playback', parameters={'fUseTrioId': 'true', 'recordingId': 'tivo:rc.247339', 'fHideBannerOnEnter': 'true'})
Note that you can choose to display the banner or not as part of request. I really like NOT displaying the banner which is what I used above.

Getting list of recording Id's seems trickier than it should be. By trial and error I couldn't get list of completed recordings, but I did manage to get in progress recordings using:
Code:
req = RpcRequest('recordingSearch', levelOfDetail='medium', bodyId='-', state=['inProgress'])
For the above when I use 'complete' instead of 'inProgress' I get an error response.
(search must have one of the following filters: 'offerId', 'collectionId', 'recordingId', 'state')

To do list searching:
Code:
req = RpcRequest('recordingSearch', levelOfDetail='medium', bodyId='-', state=['scheduled'])

__________________
Roamio Pro (GigE)
Elite (MoCA)
Premiere (MoCA adapter)
Cox - Motorola CableCards & TAs
Slingbox 350 via TiVo Mini & TiVo Stream for remote viewing

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.

Last edited by moyekj : 06-11-2011 at 08:59 PM.
moyekj is offline   Reply With Quote
Old 06-12-2011, 11:14 AM   #76
arantius
Registered User
 
Join Date: Jul 2009
Posts: 60
Quote:
Originally Posted by wmcbrine View Post
"simplejson" I think is the same as "json" in the standard library as of Python 2.6.
No it's different. It's older, and in my experience (quite surprisingly) much faster. Primarily, I'm used to it. So I stick with it. You can almost definitely substitute the standard library's "json" to no ill effect, assuming your Python is new enough to have that.
arantius is offline   Reply With Quote
Old 06-12-2011, 11:19 AM   #77
arantius
Registered User
 
Join Date: Jul 2009
Posts: 60
Two new things to report. One, the proof-of-concept script, updated to speak the newer protocol on port 1413:
https://gist.github.com/1009602#file_remote2.py

Two, the documentation I had previously mentioned:
https://docs.google.com/document/pub...VzmzybZ4u8yDE8

I'd love to know more about what all the RPCs are and how they relate, but I'm still working on figuring that all out.
arantius is offline   Reply With Quote
Old 06-12-2011, 01:55 PM   #78
moyekj
Registered User
 
Join Date: Jan 2006
Location: Mission Viejo, CA
Posts: 8,497
It's pretty clear that RPC is just part of the story though. I think the iPad is also communicating with tivo.com servers to get a lot of information and also perhaps using the traditional HMO to communicate with the TiVos as well.

Typically RPC search queries directly to the TiVo only return 1 result and are highly targeted/filtered. For example, you can't get list of all recordings on the TiVo, but you can get additional details on particular shows. When you search for "scheduled" recordings without a filter you only get the first in To Do list as a response. i.e. When using this protocol you should already be armed with specific information about existing and/or scheduled recordings which are obtained with alternate means.

Note also for example that a show 'delete' does not seem to happen through this protocol. The only relevant RPC related to delete I found was:
111637-1229-1-recordingUpdate-recordingUpdate.txt
i.e. Just information that a specific show was deleted. The actual delete itself was performed with a different method, probably using different port and protocol.
__________________
Roamio Pro (GigE)
Elite (MoCA)
Premiere (MoCA adapter)
Cox - Motorola CableCards & TAs
Slingbox 350 via TiVo Mini & TiVo Stream for remote viewing

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
moyekj is offline   Reply With Quote
Old 06-12-2011, 02:07 PM   #79
arantius
Registered User
 
Join Date: Jul 2009
Posts: 60
Quote:
Originally Posted by moyekj View Post
It's pretty clear that RPC is just part of the story though. I think the iPad is also communicating with tivo.com servers to get a lot of information and also perhaps using the traditional HMO to communicate with the TiVos as well.
I'm not certain of that yet. I think it's just complicated, nothing is completely done in one RPC.

Quote:
Originally Posted by moyekj View Post
Typically RPC search queries directly to the TiVo only return 1 result and are highly targeted/filtered. For example, you can't get list of all recordings on the TiVo
Plenty of RPCs response is an "idSequence". I think you just need to take those IDs and fire off another call to get their details. Anyway, this is one of the areas I'd expect to concentrate; getting the list of stuff on the TiVo and interacting with it (play, delete, etc.) is one of the primary nice features to add on top of the apps currently available for Android. (Which all seem to use IRCODE.)

Clearly my docs are missing something, because I don't have any idSequence responses documented. But they're there in the traces. It's gonna take a lot of work to read through all the possible responses and see where I'm missing things. Requests seem to omit optional parameters all the time, making finding them extra tricky.

Quote:
Originally Posted by moyekj View Post
Note also for example that a show 'delete' does not seem to happen through this protocol. The only relevant RPC related to delete I found was:
111637-1229-1-recordingUpdate-recordingUpdate.txt
i.e. Just information that a specific show was deleted. The actual delete itself was performed with a different method, probably using different port and protocol.
That is the request to perform the delete. The response is 111637-1229-2-response-success.txt -- success, that recording ( tivo:rc.181929 ) was deleted.
arantius is offline   Reply With Quote
Old 06-12-2011, 02:44 PM   #80
moyekj
Registered User
 
Join Date: Jan 2006
Location: Mission Viejo, CA
Posts: 8,497
Quote:
Originally Posted by arantius View Post
That is the request to perform the delete. The response is 111637-1229-2-response-success.txt -- success, that recording ( tivo:rc.181929 ) was deleted.
Ah, yes that should have been obvious - given that there is a response to go along with it. What threw me off was the state='deleted' which implied it already had happened. I was indeed able to delete a show using that method, and oddly enough it worked just using bodyId='-' (i.e. no need for tsn even though bodyId is a required argument). Now to focus next on how to obtain recording id's...
__________________
Roamio Pro (GigE)
Elite (MoCA)
Premiere (MoCA adapter)
Cox - Motorola CableCards & TAs
Slingbox 350 via TiVo Mini & TiVo Stream for remote viewing

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
moyekj is offline   Reply With Quote
Old 06-12-2011, 03:21 PM   #81
moyekj
Registered User
 
Join Date: Jan 2006
Location: Mission Viejo, CA
Posts: 8,497
Very simply, to get recordings in My Shows it is:
req = RpcRequest('recordingFolderItemSearch', bodyId='-')
(One can use 'orderBy' argument to change the order)

Also, I am glad to see I was wrong about response being only 1 item at a time. Above seems to return a full list (including folders and #items per folder).
__________________
Roamio Pro (GigE)
Elite (MoCA)
Premiere (MoCA adapter)
Cox - Motorola CableCards & TAs
Slingbox 350 via TiVo Mini & TiVo Stream for remote viewing

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.

Last edited by moyekj : 06-12-2011 at 03:43 PM.
moyekj is offline   Reply With Quote
Old 06-12-2011, 07:08 PM   #82
arantius
Registered User
 
Join Date: Jul 2009
Posts: 60
Here's a fun (if difficult to read) image to explain the request and response types:

http://img820.imageshack.us/img820/3...responsesf.png

You can see that subscriptionSearch could give a subscriptionList, or an idSequence. Then recordingSearch could give recordingList or idSequence, also recordingFolderItemSearch could give recordingFolderItemList or idSequence.

I think you see where I'm going. I happen to see a recordingFolderItemSearch that sets "format": "idSequence", gets back

Code:
{
  "isBottom": false, 
  "isTop": false, 
  "objectIdAndType": [
    "94873", 
    "871425", 
    "870665", 
    "37169", 
    "120769", 
    "46006", 
    "57822", 
    "36231", 
    "36432", 
    "35665", 
    "35648", 
    "603352", 
    "35662", 
    "38264", 
    "35739", 
    "1", 
    "0"
  ], 
  "type": "idSequence"
}
Then very soon issues a recordingFolderItemSearch of

Code:
{
  "orderBy": [
    "startTime"
  ], 
  "bodyId": "tsn:7460001905F9871", 
  "objectIdAndType": [
    "94873", 
    "871425", 
    "870665", 
    "37169", 
    "120769"
  ], 
  "note": [
    "recordingForChildRecordingId"
  ], 
  "type": "recordingFolderItemSearch", 
  "responseTemplate": [...]
}
Notice how those are the first five in the list? It issues one RPC (in this case) to see what the groups are, then another to see what the contents of (some of those) groups are. There's more RPC(s) later to dig into the list of what the recordings are, if one of these results is actually a group. (I see items and groups with lengths mixed into this response. Exactly what you'd see on the "My Shows" section of the TiVo itself, if it's set to show groups, depending on what recordings you have.)
arantius is offline   Reply With Quote
Old 06-13-2011, 08:53 AM   #83
orangeboy
yes, I AM orangeboy!
 
Join Date: Apr 2004
Location: Moline, IL
Posts: 4,075
Thumbs up

Quote:
Originally Posted by arantius View Post
Two new things to report. One, the proof-of-concept script, updated to speak the newer protocol on port 1413:
https://gist.github.com/1009602#file_remote2.py

Two, the documentation I had previously mentioned:
https://docs.google.com/document/pub...VzmzybZ4u8yDE8

I'd love to know more about what all the RPCs are and how they relate, but I'm still working on figuring that all out.
Thanks. It's obvious that you took (and are taking) a good chunk of time getting this information together. I have little doubt that an iPad like app will be developed based on your efforts.
__________________

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
orangeboy is offline   Reply With Quote
Old 06-15-2011, 01:02 PM   #84
moyekj
Registered User
 
Join Date: Jan 2006
Location: Mission Viejo, CA
Posts: 8,497
Haven't had much time to play around with this but did so a little last night. arantius, this is a TiVo gold mine you have uncovered. It doesn't take much effort to get complete "My Shows" and "To Do" lists which I have prototypes for. No doubt season pass management, etc. can also be implemented. I haven't even touched possibilities with HME, show searching etc.

This discovery basically unlocks and makes available a big chunk of the database on the Premiere that was not available previously directly from Premiere. It's akin to having a hacked Premiere without the need for hacking.
__________________
Roamio Pro (GigE)
Elite (MoCA)
Premiere (MoCA adapter)
Cox - Motorola CableCards & TAs
Slingbox 350 via TiVo Mini & TiVo Stream for remote viewing

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
moyekj is offline   Reply With Quote
Old 06-17-2011, 10:09 AM   #85
orangeboy
yes, I AM orangeboy!
 
Join Date: Apr 2004
Location: Moline, IL
Posts: 4,075
Quote:
Originally Posted by moyekj View Post
Haven't had much time to play around with this but did so a little last night. arantius, this is a TiVo gold mine you have uncovered. It doesn't take much effort to get complete "My Shows" and "To Do" lists which I have prototypes for. No doubt season pass management, etc. can also be implemented. I haven't even touched possibilities with HME, show searching etc.

This discovery basically unlocks and makes available a big chunk of the database on the Premiere that was not available previously directly from Premiere. It's akin to having a hacked Premiere without the need for hacking.
I am absolutely awestruck by the amount of information that is now available. Using the remote.py script, I've been adding in the discovered RequestTypes as functions in the Remote Class, similar to the following:

Code:
    ...
    # bodyConfigSearch
    def bodyConfigSearch(self):
        req = RpcRequest('bodyConfigSearch', 
                         bodyId='-')
        self.Write(req)
        result = self.Read()
        for item in result:
            print item
        print result['response']
        print " "
        print result
        print " "

    # channelSearch
    def channelSearch(self):
        req = RpcRequest('channelSearch',
                         noLimit='true', 
                         isReceived='false') 
        self.Write(req)
        result = self.Read()
        for item in result:
            print item
        print result['response']
        print " "
        print result
        print " "
    ...
and just simply calling them to see what can be gleaned from my own Premiere:

Code:
    ...
    remote = Remote()

    print 'bodyConfigSearch'
    remote.bodyConfigSearch()

    print 'channelSearch'
    remote.channelSearch()

   ...
Oh. My. God.

My mind is reeling with potential applications that can come from this. I can seriously see elimination of (TiVo) meta-generators that rely on IMDB and TheTVDB. Show and movie cover art and image links can be found, hardware information (userDiskSize, userDiskUsed), software information (hasScheduler(?), softwareVersion, parentalControlsState, clipOverlapping, etc.), Series information, Episode information, the list goes on and on. And I've only defined the first four RequestTypes! It makes me wonder what else is buried under the covers. What would be icing on the cake would be a "QuerySchema" request, that outputs ALL of the RequestTypes and their options, as well as output definitions.
__________________

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
orangeboy is offline   Reply With Quote
Old 06-17-2011, 10:53 AM   #86
innocentfreak
Registered User
 
Join Date: Aug 2001
Location: Florida
Posts: 8,404
Is it strange I am excited about this and don't have clue what orangeboy just said ?
__________________
1 - TiVo Roamio Pro
2 - TiVo Premiere XL

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
innocentfreak is offline   Reply With Quote
Old 06-17-2011, 11:13 AM   #87
windracer
joined the 10k club
 
windracer's Avatar
 
Join Date: Jan 2003
Location: St. Pete, FL
Posts: 11,196
He had me at "Oh. My. God."
__________________
840~Roamio Pro (TA, MoCA) + two A92~Minis
S/old: 746~Premiere, 658~HDXL, 648~OLED S3, 565~TX20, 230~S2, 140~S2

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
|
To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
windracer is offline   Reply With Quote
Old 06-17-2011, 11:34 AM   #88
orangeboy
yes, I AM orangeboy!
 
Join Date: Apr 2004
Location: Moline, IL
Posts: 4,075
I'm not a fan of hyperbole, but arantius' time and effort (I think) was monumental! There's a lot to go through, but I encourage downloading the "Request/Responses" zip found in this post: http://www.tivocommunity.com/tivo-vb...11#post8556511

If you do get the zip, this file is an example of a collectionSearch: 61706-32-2-response-contentList.txt, that I think would provide an ideal set of data for a new meta-generator. Bah, here's the content of the file:

Code:
MRPC/2 76 2928
Raw Packet=MRPC/2 76 2928
Content-Type: application/json
IsFinal: true
RpcId: 32
Type: response

{
  "content": [
    {
      "category": [
        {
          "image": [
            {
              "width": 360, 
              "imageUrl": "http://i.tivo.com/images-static/bravo/genre-backgrounds/showcaseBanner/Drama.jpg", 
              "type": "image", 
              "imageType": "showcaseBanner", 
              "height": 270
            }, 
            {
              "width": 180, 
              "imageUrl": "http://i.tivo.com/images-static/bravo/genre-backgrounds/moviePoster/Drama.jpg", 
              "type": "image", 
              "imageType": "moviePoster", 
              "height": 270
            }
          ], 
          "displayRank": 0, 
          "type": "category", 
          "label": "Drama"
        }, 
        {
          "displayRank": 1, 
          "type": "category", 
          "label": "TV Show"
        }
      ], 
      "collectionType": "series", 
      "seasonNumber": 4, 
      "description": "Gossip flies about Caroline and a man (Gil Gerard) building her kitchen in exchange for room and board.", 
      "episodic": true, 
      "collectionId": "tivo:cl.19284", 
      "contentId": "tivo:ct.127876", 
      "image": [
        {
          "width": 139, 
          "imageUrl": "http://i.tivo.com/images-production/bravo/banner-med/dd/a7/dda739d69d9893b079ee4479043e9dea.jpg", 
          "type": "image", 
          "imageType": "showcaseBanner", 
          "height": 104
        }, 
        {
          "width": 200, 
          "imageUrl": "http://i.tivo.com/images-production/bravo/banner-lg/dd/a7/dda739d69d9893b079ee4479043e9dea.jpg", 
          "type": "image", 
          "imageType": "showcaseBanner", 
          "height": 150
        }
      ], 
      "episodeNum": [
        4
      ], 
      "originalAirYear": 1977, 
      "credit": [
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Landon", 
          "first": "Michael"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Grassle", 
          "first": "Karen"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Gilbert", 
          "first": "Melissa"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Anderson", 
          "first": "Melissa"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Swenson", 
          "first": "Karl"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Bull", 
          "first": "Richard"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "MacGregor", 
          "first": "Katherine"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Arngrim", 
          "first": "Alison"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Gilbert", 
          "first": "Jonathan"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Hagen", 
          "first": "Kevin"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Greer", 
          "first": "Dabbs"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Stewart", 
          "first": "Charlotte"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Olsen", 
          "first": "Merlin"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Laborteaux", 
          "first": "Patrick"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Parady", 
          "first": "Hersha"
        }, 
        {
          "role": "guestStar", 
          "type": "credit", 
          "last": "Gerard", 
          "first": "Gil"
        }, 
        {
          "role": "guestStar", 
          "type": "credit", 
          "last": "Baddeley", 
          "first": "Hermione"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Greenbush", 
          "first": "Lindsay"
        }, 
        {
          "role": "actor", 
          "type": "credit", 
          "last": "Greenbush", 
          "first": "Sidney"
        }, 
        {
          "role": "writer", 
          "type": "credit", 
          "last": "Heinemann", 
          "first": "Arthur"
        }, 
        {
          "role": "director", 
          "type": "credit", 
          "last": "Claxton", 
          "first": "William F."
        }
      ], 
      "title": "Little House on the Prairie", 
      "subtitle": "The Handyman", 
      "type": "content", 
      "tvRating": "pg"
    }
  ], 
  "type": "contentList"
}
Note that it contains: a couple "imageUrl"s, "seasonNumber", "episodeNum", "originalAirYear", "title" (Series title), and "subtitle" (Episode title), not to mention "description" and "role" for cast and crew, all handy/interesting information. Other than the images, I believe all the other information is local. Although the Request looks a bit daunting, I think the payoff is well worth the effort. Yessir, I like it!
__________________

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
orangeboy is offline   Reply With Quote
Old 06-17-2011, 12:21 PM   #89
innocentfreak
Registered User
 
Join Date: Aug 2001
Location: Florida
Posts: 8,404
I guess the next question is there anything us non programmers can do to help?
__________________
1 - TiVo Roamio Pro
2 - TiVo Premiere XL

To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.


To view links or images in signatures your post count must be 10 or greater. You currently have 0 posts.
innocentfreak is offline   Reply With Quote
Old 06-17-2011, 12:33 PM   #90
ckrames1234
Registered User
 
Join Date: May 2011
Posts: 4
I love the API documentation, great work arantius. I will definitely try to contribute to it. There are so many things I could do with this, projects I could make, the possibilities are literally endless.

I never posted sample code on here because in my sample, I tried using a random X-ApplicationSessionId, which I now know is not a good idea. :P

(For some reason I never got notified when someone posted on here :/)
ckrames1234 is offline   Reply With Quote
Reply
Forum Jump




Thread Tools


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Advertisements

TiVo Community
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
vBulletin Skins by: Relivo Media

(C) 2013 Magenium Solutions - All Rights Reserved. No information may be posted elsewhere without written permission.
TiVoŽ is a registered trademark of TiVo Inc. This site is not owned or operated by TiVo Inc.
All times are GMT -5. The time now is 11:20 AM.
OUR NETWORK: MyOpenRouter | TechLore | SansaCommunity | RoboCommunity | MediaSmart Home | Explore3DTV | Dijit Community | DVR Playground |