New LINQ provider for Flickr

LINQ provider for Flickr gives  an easy way to query , add and delete Flickr photos. Here, I will give some sneak preview about how to use the provider to do different operations on Flickr, as if doing queries with SQL objects.

Now, waiting no more, lets see, what can we do with it.

Now, Let's say, i want to get a particular user's ("chschulz") photos with "New york" as search key  and I also want only the first page, where each page should have 5 items.

The code snippet for that will be :

// create the context
FlickrContext context = new FlickrContext();
// set the user.
string user = "chschulz";
// do query.
var query = (from ph in context.Photos
             where ph.User == user && ph.SearchText == "New York" && ph.PhotoSize == PhotoSize.Thumbnail
             select ph).Take(5).Skip(0);

try
{

    foreach (Photo p in query)
    {
        Console.WriteLine(p.Title + "\r\n" + p.Url);
    }

}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

Output

50th Steuben Parade
http://farm2.static.flickr.com/1067/1409243458_776fdd4f53_t.jpg?v=0
50th Steuben Parade
http://farm2.static.flickr.com/1234/1408366057_96c9498f6b_t.jpg?v=0
50th Steuben Parade
http://farm2.static.flickr.com/1236/1408380481_9df2e62351_t.jpg?v=0
50th Steuben Parade
http://farm2.static.flickr.com/1335/1408370401_f4315f2e00_t.jpg?v=0
50th Steuben Parade
http://farm2.static.flickr.com/1383/1408375435_861124b5aa_t.jpg?v=0

One thing to add,  by default when we will query without any private/semi-private view mode, result will contain only public photos.

To have Semi-private /private photos, We can set option by ViewMode enum

public enum ViewMode
{
    Owner,
    Public = 1,
    Friends,
    Family,
    FriendsFamily,
    Private
}

Note, There is a value called ViewMode.Owner, when specified , it means "get all my photos". This will get all private/semi-private photos of an authenticated account.Also, ViewMode.Private and ViewMode.Owner, will get the private photos only and all photos of a specified user respectively.

When we  will try to view or modify private/semi-private photos, The authentication process will done by API on behalf. The API will automatically , open a new browser(for windows app) / take to the URL, where the user will be prompted for valid credentials and access permission for the app, for which the photos to be viewed/deleted/added. Finally, the user will be taken back to the app, after user closes browser (windows app) / automatically (web app, we have to specify the URL of our app, in the return URL of API configuration page of Flickr).

There is also an enum for specifying Photosize

public enum PhotoSize
{
    Square,
    Thumbnail,
    Small,
    Medium,
    Original,
    Default = Medium (this is set by default)
}

In addition, the most important options for searching are:

  • Photo.SearchText : Used for specifying keyword for which Title, Description or tags will be search on.
  • Photo.User : The name of the user , of whom the photos will be queried on.

Moving forward, LINQ query for viewing single phtoto for an ID.

FlickrContext context = new FlickrContext();

var query = from ph in context.Photos
            where ph.Id == PhotoId && ph.PhotoSize == PhotoSize.Medium
            select ph;

Photo photo = query.Single<Photo>();

Next , query syntax for deleting a photo.

FlickrContext context = new FlickrContext();
var query = from ph in context.Photos
             where ph.Id == PhotoId
             select ph;

Photo photo = query.Single<Photo>();

context.Photos.Remove(photo);
context.SubmitChanges();

Any  remove or add operation must follow a FlickrContext.SubmitChanges(). This is where, the action will be posted to Flickr.

Finally, API is never done without a photo add operation. Snippet for that :-

FlickrContext context = new FlickrContext();
context.Photos.Add(
new Photo{ FileName = Path.GetFileName(uploader.Value),
File = uploader.PostedFile.InputStream, ViewMode = ViewMode.Private});
context.SubmitChanges();

Here, we have to either set the Photo.File(Stream) for uploaded file (in web app), or we can only specify  Phtoto.FilePath (windows app).

*The above , three examples are taken from Flickr.Web (test) app , which is provided with the LINQ.Flickr API at codeplex.

This is the short briefing of LINQ To Flickr API , which I have recently uploaded in codeplex, please give a look at it and let me know , how can I improve it more.

The API can be downloaded at : LINQ to Flickr API

 

kick it on DotNetKicks.com

7 Comments

Comments have been disabled for this content.