The media API allows access to individual content items.
A call to the media API looks very much like an uri, with some additions:
http(s)://tt.se/[mediaType]/[id][-operation][_suffix][.extension]
mediaType
and id
are part of the uri
and uniquely identifies
an item in the database.extension
indicates what type of media (Jpeg, PDF, XML,
TTninjs, etc.) we are interested in.suffix
further qualifies what kind of variant and usage
we want.operation
indicates whether the object should be
transformed in any way.Jpeg images can be transformed on the fly by using an image operator.
The -watermark
operator inserts a TT Nyhetsbyrån watermark in the lower
left corner of the image. It can be used with any image resolution,
but works best with previews.
https://tt.se/media/image/sdltdb3dffd-watermark_NormalPreview.jpg
To crop an image, use the -crop
operator and supply the desired
dimensions like this (where NN
is a numeric value):
_wNN
- width in pixels_hNN
- height in pixels_xNN
- x offset in pixels_yNN
- y offset in pixelsThere is no automatic scaling adjustment for different image resolutions; you need to calculate and supply the proper dimensions yourself.
https://tt.se/media/image/sdltdb3dffd-crop_x300_y200_w350_h250_NormalPreview.jpg
Cropping also works for metadata, but it works a little different than
jpeg cropping. You supply the dimensions for cropping the hires image,
and in return you get a metadata object where the href
property of
all renditions has been modified by inserting properly scaled -crop
operators.
https://tt.se/media/image/sdltdb3dffd-crop_x300_y200_w350_h250.json
"renditions": {
"r00": {
"usage": "Hires",
"variant": "Normal",
"mimetype": "image/jpeg",
"href": "https://beta.tt.se/media/image/sdltdb3dffd-crop_w350_h250_x300_y200_NormalHires.jpg",
"width": 350,
"height": 250,
"printsize": 50055000
},
"r01": {
"usage": "Preview",
"variant": "Normal",
"mimetype": "image/jpeg",
"href": "https://beta.tt.se/media/image/sdltdb3dffd-crop_w72_h51_x62_y41_NormalPreview.jpg",
"width": 72,
"height": 51
},
"r02": {
"usage": "Preview",
"variant": "Watermark",
"mimetype": "image/jpeg",
"href": "https://beta.tt.se/media/image/sdltdb3dffd-crop_w72_h51_x62_y41_WatermarkPreview.jpg",
"width": 72,
"height": 51
},
"r03": {
"usage": "Thumbnail",
"variant": "Normal",
"mimetype": "image/jpeg",
"href": "https://beta.tt.se/media/image/sdltdb3dffd-crop_w18_h13_x15_y10_NormalThumbnail.jpg",
"width": 18,
"height": 13
}
}
The suffix usually takes the form _[variant][usage]
, where variant
and usage indicates what variation and resolution we want. This only
applies to images and video.
_NormalHires
_WatermarkedPreview
_CroppedThumbnail
The suffix may also contain an association id:
/[association]_[variant][usage]
. This is used to refer to a specific
media object that has been associated with a text object.
This is the URL for the preview rendition of the first image
associated with the 190308-maggiobayside-899214
text:
https://tt.se/media/text/190308-maggiobayside-899214/a001_NormalPreview.jpg
Extensions roughly translates to MIME types.
Extension | MIME type | Description |
---|---|---|
.jpg |
image/jpeg |
Jpeg image |
.pdf |
application/pdf |
|
.eps |
application/postscript |
EPS |
.json |
application/json |
TTNinjs content |
.xml |
text/xml |
TTNewsML content |
.zip |
application/zip |
Zipped bundle |
-cutpaste.txt |
text/plain |
Cut & paste-friendly text |
-indesign.txt |
text/plain |
Indesign document |
https://tt.se/media/text/190308-maggiobayside-899214.json
-
metadata in TTNinjs form.https://tt.se/media/text/190308-maggiobayside-899214.xml
-
metadata in TTNewsML form.The media API supports OAuth2 token bearer or API Key authentication. Some calls, like fetching metadata of images or thumbnail/preview representations of images, don't require any authentication, but most other calls do.
Keys are sent as the query parameter ak
.
Example request:
curl "https://tt.se/media/text/190308-maggiobayside-899214/a001_NormalHires.jpg?ak=a0bf8f64-e674-439b-ba07-476d069ebba6"
You currently need a TT subscription agreement to access hires media. Downloading an image or triggering a delivery counts as a purchase.
You can use the media API to trigger deliveries programatically in the same way a user would do it on the TT site.
First you need to determine your subscription agreement ID. There are two ways to do this:
GET /user/v1/agreement
endpoint in the [Content
API]. Use this option if you are using OAuth2 authentication.You also need to configure a delivery channel in the Mina Sidor ->
Leveranskanaler page on the TT
site. Note the Channel ID, which has the form user:<username>:<channel name>
.
To trigger a delivery you make a GET request for the object uri
with
the following parameters.
agr
- the subscription agreement ID.channel
- the channel ID. The channel determines both formats and
delivery method.ak
- application key, if you are using application key authentication.https://tt.se/media/text/190308-maggiobayside-899214?agr=40768&channel=user:panda:ftp8&ak=443bfbb6-cbc7-482c-b143-6dee6dc4ae8e
When downloading a zip, we use a download channel to select the contents of the .zip
GET https://tt.se/media/text/151006-senap-162464.zip?channel=user:ttit:skrivbord # channel deides zip contents
GET https://tt.se/media/text/151006-senap-162464 # redirect to kundwebb
GET https://tt.se/media/text/151006-senap-162464.json # ttninjs
GET https://tt.se/media/text/151006-senap-162464.xml # ttnewsml
GET https://tt.se/media/text/151006-senap-162464.zip # article and images packaged up
GET https://tt.se/media/text/151006-senap-162464-cutpaste.txt # cut-paste txt variant
GET https://tt.se/media/text/151006-senap-162464-indesign.txt # indesign document
GET https://tt.se/media/text/151006-senap-162464/a000_NormalPreview.jpg # association a000 normal preview
GET https://tt.se/media/text/151006-senap-162464/a000_NormalThumbnail.jpg # association a000 normal thumb
GET https://tt.se/media/text/151006-senap-162464/a000_CroppedThumbnail.jpg # association a000 cropped thumb
Image
GET https://tt.se/media/image/sdltaa20b4b # redirect to kundwebb
GET https://tt.se/media/image/sdltaa20b4b.json # ttninjs
GET https://tt.se/media/image/sdltaa20b4b.xml # ttnewsml
GET https://tt.se/media/image/sdltaa20b4b.zip # image and metadata packaged up
GET https://tt.se/media/image/sdltaa20b4b.jpg # hires jpg
GET https://tt.se/media/image/sdltaa20b4b_NormalHires.jpg # hires jpg
GET https://tt.se/media/image/sdltaa20b4b_NormalPreview.jpg # normal preview jpg
GET https://tt.se/media/image/sdltaa20b4b_NormalThumbnail.jpg # normal thumb jpg
GET https://tt.se/media/graphic/gf177556 # redirect to kundwebb
GET https://tt.se/media/graphic/gf177556.json # ttninjs
GET https://tt.se/media/graphic/gf177556.xml # ttnewsml
GET https://tt.se/media/graphic/gf177556.zip # graphic and metadata packaged up
GET https://tt.se/media/graphic/gf177556.pdf # hires color pdf
GET https://tt.se/media/graphic/gf177556_BlackAndWhiteHires.pdf # hires b/w pdf
GET https://tt.se/media/graphic/gf177556.eps # hires color eps (if available)
GET https://tt.se/media/graphic/gf177556_BlackAndWhite.eps # hires b/w eps (if available)
GET https://tt.se/media/graphic/gf177556_NormalPreview.jpg # normal preview jpg
GET https://tt.se/media/graphic/gf177556_NormalThumbnail.jpg # normal thumb jpg
GET https://tt.se/media/graphic/gf177556_CroppedThumbnail.jpg # cropped thumb jpg
GET https://tt.se/media/video/sdltaa1f67a # redirect to kundwebb
GET https://tt.se/media/video/sdltaa1f67a.json # ttninjs
GET https://tt.se/media/video/sdltaa1f67a.xml # ttnewsml
GET https://tt.se/media/video/sdltaa1f67a_NormalThumbnail.jpg # normal thumb jpg
GET https://tt.se/media/video/sdltaa1f67a_NormalPreview.mp4 # normal preview mp4