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>