aboutsummaryrefslogtreecommitdiffstats
path: root/docs/source/api/images.rst
blob: 8c2653d4a2f7c85482acc29d1f6d4fdc0f24deef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
.. MediaGoblin Documentation

   Written in 2011, 2012 by MediaGoblin contributors

   To the extent possible under law, the author(s) have dedicated all
   copyright and related and neighboring rights to this software to
   the public domain worldwide. This software is distributed without
   any warranty.

   You should have received a copy of the CC0 Public Domain
   Dedication along with this software. If not, see
   <http://creativecommons.org/publicdomain/zero/1.0/>.

==================
Uploading an Image
==================

To use any the APIs mentioned in this document you will required :doc:`oauth`

Uploading and posting an image requiest you to make two requests, one of which
submits the image to the server, the other of which will post the meta data.

To upload an image you should use the URI `/api/user/<username>/uploads`.

A POST request should be made to the image upload URI submitting at least two header:

* `Content-Type` - This being a valid mimetype for the image.
* `Content-Length` - size in bytes of the image.

The binary image data should be submitted as POST data to the image upload URI.
You will get back a JSON encoded response which will look similiar to::

    {
        "updated": "2014-01-11T09:45:48Z",
        "links": {
            "self": {
                "href": "https://<server>/image/4wiBUV1HT8GRqseyvX8m-w"
            }
        },
        "fullImage": {
            "url": "https://<server>//uploads/<username>/2014/1/11/V3cBMw.jpg",
            "width": 505,
            "height": 600
        },
        "replies": {
            "url": "https://<server>//api/image/4wiBUV1HT8GRqseyvX8m-w/replies"
        },
        "image": {
            "url": "https://<server>/uploads/<username>/2014/1/11/V3cBMw_thumb.jpg",
            "width": 269,
            "height": 320
        },
        "author": {
            "preferredUsername": "<username>",
            "displayName": "<username>",
            "links": {
                "activity-outbox": {
                    "href": "https://<server>/api/user/<username>/feed"
                },
                "self": {
                    "href": "https://<server>/api/user/<username>/profile"
                },
                "activity-inbox": {
                    "href": "https://<server>/api/user/<username>/inbox"
                }
            },
            "url": "https://<server>/<username>",
            "updated": "2013-08-14T10:01:21Z",
            "id": "acct:<username>@<server>",
            "objectType": "person"
        },
        "url": "https://<server>/<username>/image/4wiBUV1HT8GRqseyvX8m-w",
        "published": "2014-01-11T09:45:48Z",
        "id": "https://<server>/api/image/4wiBUV1HT8GRqseyvX8m-w",
        "objectType": "image"
    }

The main things in this response is `fullImage` which contains `url` (the URL
of the original image - i.e. fullsize) and `image` which contains `url` (the URL
of a thumbnail version).

Submit to feed
==============

The next request you will probably wish to make is to post the image to your
feed, this currently in GNU MediaGoblin will just show it visably on the website.
In the future it will allow you to specify whom should see this image.

The URL you will want to make a POST request to to is `/api/user/<username>/feed`

You first should do a post to the feed URI with some of the information you got
back from the above request (which uploaded the image). The request should look
something like::

    {
        "verb": "post",
        "object": {
            "id": "https://<server>/api/image/6_K9m-2NQFi37je845c83w",
            "objectType": "image"
        }
    }

(Any other data submitted **will** be ignored)

Finally if you wish to set a title, description and licence you will need to do
and update request to the endpoint, the following attributes can be submitted:

+--------------+---------------------------------------+-------------------+
| Name         | Description                           | Required/Optional |
+==============+=======================================+===================+
| displayName  | This is the title for the image       | Optional          |
+--------------+---------------------------------------+-------------------+
| content      | This is the description for the image | Optional          |
+--------------+---------------------------------------+-------------------+
| license      | This is the licence to be used        | Optional          |
+--------------+---------------------------------------+-------------------+

.. note:: license attribute is mediagoblin specific, pump.io does not support this attribute


The update request should look something similiar to::

    {
        "verb": "update",
        "object": {
            "displayName": "My super awesome image!",
            "content": "The awesome image I took while backpacking to modor",
            "license": "creativecommons.org/licenses/by-sa/3.0/",
            "id": "https://<server>/api/image/6_K9m-2NQFi37je845c83w",
            "objectType": "image"
        }
    }

(Again, any other data submitted **will** be ignored).