Uploading or replacing images

Transferring images requires special attention since they have to send a lot of data. Therefore they also are a bit different than advertised in the Flickr API documentation.

flickr.upload(…)

The flickr.upload(...) method has the following parameters:

filename

The filename of the image. The image data is read from this file or from fileobj.

fileobj

An optional file-like object from which the image data can be read.

title

The title of the photo

description

The description of the photo

tags

Space-delimited list of tags. Tags that contain spaces need to be quoted. For example:

tags='''Amsterdam "central station"'''

Those are two tags, “Amsterdam” and “central station”.

is_public

“1” if the photo is public, “0” if it is private. The default is public.

is_family

“1” if the private photo is visible for family, “0” if not. The default is not.

is_friend

“1” if the private photo is visible for friends, “0” if not. The default is not.

format

The response format. This must be either rest or one of the parsed formats etree / xmlnode.

The fileobj parameter can be used to monitor progress via a callback method. For example:

import os.path

class FileWithCallback(object):
    def __init__(self, filename, callback):
        self.file = open(filename, 'rb')
        self.callback = callback
        # the following attributes and methods are required
        self.len = os.path.getsize(filename)
        self.fileno = self.file.fileno
        self.tell = self.file.tell

    def read(self, size):
        if self.callback:
            self.callback(self.tell() * 100 // self.len)
        return self.file.read(size)

params['fileobj'] = FileWithCallback(params['filename'], callback)
rsp = flickr.upload(params)

The callback method takes one parameter:

def callback(progress):
    print(progress)

progress is a number between 0 and 100.

flickr.replace(…)

The flickr.replace(...) method has the following parameters:

filename

The filename of the image.

photo_id

The identifier of the photo that is to be replaced. Do not use this when uploading a new photo.

fileobj

An optional file-like object from which the image data can be read.

format

The response format. This must be either rest or one of the parsed formats etree / xmlnode.

Only the image itself is replaced, not the other data (title, tags, comments, etc.).