Podcast Producer 2 REST api

I’ve been working on documenting the REST api that PCP2 uses for client server communication as part of a new project. I thought it might be useful to other folks. Consider this a work in progress – I’ve only documented the workflow for doing a multisource recording so far. Follow the job for the info.

Each section gives a sample command and a sample response.

All pages are behind basic HTTP auth.

General sequence of events

* get workflow list

* get cameras

* request status for camera (including thumbnail)

* start cameras

* create recording enclosure

* stop cameras, provide submission_UUID returned by above step, include title

—-

*URL: https://pcpserver:8170/podcastproducer/info

*Type: GET

*Content: version=2

*Response:

<pre>

<podcast_producer_result>

<action>index</action>

<status>success</status>

<plist version=”1.0″>

<dict>

<key>server_version</key>

<string>2.0</string>

<key>http_auth_type</key>

<array>

<string>basic</string>

<string>digest</string>

<string>kerberos</string>

</array>

<key>krb_service_principals</key>

<array>

<string>pcast/x101-186-103-dhcp.cla.umn.edu@X101-186-103-DHCP.CLA.UMN.EDU</string>

</array>

<key>server_uuid</key>

<string>DB31DA49-10AE-472C-B3B9-86A8F8112399</string>

<key>cluster_members</key>

<dict>

<key>F1021B98-7E7E-44FB-8EB1-E0DA1885D5BA</key>

<dict>

<key>date_added</key>

<string>Tue Sep 01 10:23:49 -0500 2009</string>

<key>last_update</key>

<string>Tue Sep 08 10:35:17 -0500 2009</string>

<key>server_host</key>

<string>x101-186-103-dhcp.cla.umn.edu</string>

<key>server_port</key>

<string>8170</string>

<key>tunnel_agent_host</key>

<string>x101-186-103-dhcp.cla.umn.edu</string>

<key>tunnel_agent_port</key>

<string>8175</string>

<key>network_addrs</key>

<array>

<string>128.101.186.103</string>

</array>

</dict>

</dict>

</dict>

</plist>

</podcast_producer_result>

</pre>

—-

* URL: https://pcpserver:8170/podcastproducer/workflows

* Type: GET

* Content: version=2&language=en

* Response:

<pre>

<podcast_producer_result>

<action>index</action>

<status>success</status>

<results>OK</results>

<plist version=”1.0″>

<dict>

<key>user_fullname</key>

<string>podcast</string>

<key>user_shortname</key>

<string>podcast</string>

<key>workflows</key>

<array>

<dict>

<key>name</key>

<string>Montage</string>

<key>title</key>

<string>Montage</string>

<key>description</key>

<string>Montage workflow</string>

<key>uuid</key>

<string>F797D54D-1539-42AA-B6AC-3CB3A4C15EF5</string>

<key>version</key>

<string>2.0</string>

<key>editor</key>

<string>Podcast Composer</string>

<key>sources</key>

<array>

<dict>

<key>contentTypes</key>

<array>

<string>com.apple.quicktime-movie</string>

<string>com.adobe.pdf</string>

<string>com.apple.iwork.keynote.key</string>

<string>com.apple.iwork.pages.pages</string>

<string>org.openxmlformats.wordprocessingml.document</string>

<string>com.microsoft.word.doc</string>

<string>org.openxmlformats.presentationml.presentation</string>

<string>com.microsoft.powerpoint.ppt</string>

<string>com.microsoft.bmp</string>

<string>com.compuserve.gif</string>

<string>public.jpeg-2000</string>

<string>public.jpeg</string>

<string>com.adobe.pdf</string>

<string>com.apple.pict</string>

<string>public.png</string>

<string>com.adobe.photoshop-image</string>

<string>com.sgi.sgi-image</string>

<string>com.truevision.tga-image</string>

<string>public.tiff</string>

</array>

<key>description</key>

<string>Any Document</string>

<key>isFolder</key>

<true/>

<key>isOptional</key>

<false/>

<key>sourceTypes</key>

<array>

<string>File</string>

</array>

</dict>

</array>

<key>user_requirements</key>

<array>

<string>Title</string>

<string>Description</string>

</array>

<key>access_control_entries</key>

<array>

</array>

</dict>

<dict>

<key>name</key>

<string>Single Source</string>

<key>title</key>

<string>Single Source</string>

<key>description</key>

<string>Single Source workflow</string>

<key>uuid</key>

<string>DEFA1587-A650-426E-92DA-01C5EB811705</string>

<key>version</key>

<string>2.0</string>

<key>editor</key>

<string>Podcast Composer</string>

<key>sources</key>

<array>

<dict>

<key>contentTypes</key>

<array>

<string>com.apple.quicktime-movie</string>

</array>

<key>description</key>

<string>Any Video</string>

<key>isFolder</key>

<false/>

<key>isOptional</key>

<false/>

<key>sourceTypes</key>

<array>

<string>Video</string>

<string>Screen</string>

<string>Audio</string>

<string>File</string>

</array>

</dict>

</array>

<key>user_requirements</key>

<array>

<string>Title</string>

<string>Description</string>

</array>

<key>access_control_entries</key>

<array>

</array>

</dict>

</array>

</dict>

</plist>

</podcast_producer_result>

</pre>

—-

* URL: https://pcpserver:8170/podcastproducer/cameras

* Type: GET

* Content: version=2

* Response:

<pre>

<podcast_producer_result>

<action>index</action>

<status>success</status>

<plist version=”1.0″>

<dict>

<key>cameras</key>

<array>

<dict>

<key>name</key>

<string>150-A Camera</string>

<key>uuid</key>

<string>307682A5-B552-4AFA-B7E2-3811D772C9A1</string>

<key>connected_to_member_uuid</key>

<string>F1021B98-7E7E-44FB-8EB1-E0DA1885D5BA</string>

<key>in_use</key>

<string>false</string>

<key>recording_status</key>

<string>online</string>

<key>preview_url</key>

<string>https://x101-186-103-dhcp.cla.umn.edu:8170/podcastproducer/previews/307682A5-B552-4AFA-B7E2-3811D772C9A1.jpg</string>

<key>access_control_entries</key>

<array>

</array>

</dict>

<dict>

<key>name</key>

<string>150-A Epiphan</string>

<key>uuid</key>

<string>CE610AB0-CA50-49EB-8FFE-78E57CDCA550</string>

<key>connected_to_member_uuid</key>

<string>F1021B98-7E7E-44FB-8EB1-E0DA1885D5BA</string>

<key>in_use</key>

<string>false</string>

<key>recording_status</key>

<string>online</string>

<key>preview_url</key>

<string>https://x101-186-103-dhcp.cla.umn.edu:8170/podcastproducer/previews/CE610AB0-CA50-49EB-8FFE-78E57CDCA550.jpg</string>

<key>access_control_entries</key>

<array>

</array>

</dict>

</array>

</dict>

</plist>

</podcast_producer_result>

</pre>

—-

* URL: https://pcpserver:8170/podcastproducer/cameras/start

* Type: POST

* Content: action=pause&version=2&camera_name=150-A%20Camera&controller=cameras

* Response:

<pre>

<podcast_producer_result>

<action>start</action>

<status>success</status>

<results>OK</results>

</podcast_producer_result>

</pre>

—-

* URL: https://pcpserver:8170/podcastproducer/cameras/status

* Type: POST

* Content: delay=0&action=start&version=2&camera_name=150-A%20Epiphan&controller=cameras

* Response:

<pre><podcast_producer_result>

<action>status</action>

<status>success</status>

<results>OK</results>

<plist version=”1.0″>

<dict>

<key>preview</key>

<string>https://x101-186-103-dhcp.cla.umn.edu:8170/podcastproducer/previews/307682A5-B552-4AFA-B7E2-3811D772C9A1.jpg</string>

<key>preview_image_data</key>

<string>RAW JPEG DATA RAW JPEG DATA RAW JPEG DATA RAW JPEG DATA RAW JPEG DATA</string>

<key>recording_status</key>

<string>online</string>

<key>started_at</key>

<string>Tue Sep 08 09:31:40 -0500 2009</string>

<key>stopped_at</key>

<string>Tue Sep 08 09:32:10 -0500 2009</string>

<key>elapsed</key>

<string>41</string>

<key>last_error</key>

<string>805306368</string>

</dict>

</plist>

</podcast_producer_result>

</pre>

—-

* URL: https://pcpserver:8170/podcastproducer/cameras/pause

* Type: POST

* Content: action=pause&version=2&camera_name=150-A%20Camera&controller=cameras

* Response:

<pre><podcast_producer_result>

<action>status</action>

<status>success</status>

<results>OK</results>

<plist version=”1.0″>

<dict>

<key>preview</key>

<string>https://x101-186-103-dhcp.cla.umn.edu:8170/podcastproducer/previews/307682A5-B552-4AFA-B7E2-3811D772C9A1.jpg</string>

<key>recording_status</key>

<string>online</string>

<key>started_at</key>

<string>Tue Sep 08 09:31:40 -0500 2009</string>

<key>stopped_at</key>

<string>Tue Sep 08 09:32:10 -0500 2009</string>

<key>elapsed</key>

<string>41</string>

<key>last_error</key>

<string>805306368</string>

</dict>

</plist>

</podcast_producer_result></pre>

—-

* URL: https://pcpserver:8170/podcastproducer/cameras/stop

* Type: POST

* Content: workflow_name=&UserMetadata_Description=&submission_uuid=7497E3AC-0A75-4C7C-8C66-26294C9274FE&action=stop&version=2&camera_name=150-A%20Epiphan&controller=cameras&UserMetadata_Title=Test123

* Response:

<pre><podcast_producer_result>

<action>stop</action>

<status>success</status>

<results>OK</results>

</podcast_producer_result>

</pre>

—-

* URL: https://pcpserver:8170/podcastproducer/recordings/create

* Type: POST

* Content: version=2&workflow_uuid=C6EF52A7-04E3-477D-9F38-6B61F108D7B9

* Response:

<pre>

<podcast_producer_result>

<action>create</action>

<status>success</status>

<results>OK</results>

<plist version=”1.0″>

<dict>

<key>workflow_uuid</key>

<string>C6EF52A7-04E3-477D-9F38-6B61F108D7B9</string>

<key>recording_uuid</key>

<string>FD5A1459-F7CE-41FA-8155-049DF774298B</string>

<key>submission_uuids</key>

<array>

<string>A626D8E4-E439-4E57-9982-DB4BD035CB41</string>

<string>CFBCCB74-A41F-42D3-BEAA-58165B1116C6</string>

</array>

</dict>

</plist>

</podcast_producer_result>

</pre>

Leave a Reply

Your email address will not be published. Required fields are marked *