public static void Main(string[] args)
{
Console.WriteLine("ThumbSync - Flickr Sync by Tristan Phillips v0.4");
if (!ParseArgs(args))
{
Console.WriteLine("usage: ThumbSync.exe -u <userIDs , seperated> -o <out directory>\n" +
"Optionals:\n" +
"-c <count, default 20> \n" +
"-s get small photos (default medium) \n" +
"-t get thumbnails (default medium) \n" +
"-l get large photos (default medium) \n" +
"-T <pre authenticated token> \n" +
"-O overwrite existing local copy \n" +
"-p <start at page> \n" +
"-th <throttle millisecs> \n" +
"-W use white average file validation");
return;
}
string[] userIDs = userIds.Split(',');
FlickrNet.Flickr f = new FlickrNet.Flickr("5f9dbe6d11086346eacc6d9b9d81a5f5", "826ddba13f621f18");
if (token == "")
{
string frob = f.AuthGetFrob();
string url = f.AuthCalcUrl(frob, AuthLevel.Read);
Console.WriteLine("Go here & authenticate: " + url);
Console.WriteLine("When you are done, press return . . . I'll be waiting . . .");
try
{
/*
* System.Diagnostics.Process p = new System.Diagnostics.Process();
* p.StartInfo.FileName="c:\\program files\\internet explorer\\iExplore.exe";
* p.StartInfo.Arguments = url;
* p.Start();
* System.Diagnostics.Process p2 = new System.Diagnostics.Process();
* p2.StartInfo.FileName="/Applications/Safari.app/Contents/MacOS/Safari";
* p2.StartInfo.Arguments = "\"" + url + "\"";
* p2.Start();
*/
}
catch {}
Console.ReadLine();
FlickrNet.Auth auth = f.AuthGetToken(frob);
Console.WriteLine("Token (you can re-use this with -T): " + auth.Token);
token = auth.Token;
}
f.AuthToken = token;
foreach (string userId in userIDs)
{
Person per = f.PeopleGetInfo(userId);
string personName = per.UserName;
Console.WriteLine("Processing " + maxPerPerson + " from " + per.UserName + "(" + per.RealName + ")");
while (collected < maxPerPerson)
{
PhotoCollection res = f.PeopleGetPhotos(userId, page, pageSize);
collected += res.Count;
if (res.Page == res.Pages)
{
collected = maxPerPerson;
}
foreach (Photo p in res)
{
bool processed = false;
int tries = 0;
int startSecsWait = 120;
int maxTries = 15;
while (!processed && tries < maxTries)
{
try
{
tries++;
Console.Write(". ");
if (x % 10 == 0)
{
Console.Write(x + " ");
}
PhotoInfo info = f.PhotosGetInfo(p.PhotoId);
string tag = info.Tags.Count > 0 ? info.Tags[0].Raw : "NotTagged";
if (!System.IO.Directory.Exists(OutDir + System.IO.Path.DirectorySeparatorChar + personName + "-" + tag))
{
System.IO.Directory.CreateDirectory(OutDir + System.IO.Path.DirectorySeparatorChar + personName + "-" + tag);
}
string url = smallPhotos ? p.SmallUrl : p.MediumUrl;
url = largeSize ? p.LargeUrl : url;
url = thumbnailSize ? p.ThumbnailUrl: url;
string[] pNames = url.Split('/');
string pName = pNames[pNames.Length - 1];
string fileName = OutDir + System.IO.Path.DirectorySeparatorChar + personName + "-" + tag + System.IO.Path.DirectorySeparatorChar + pName;
if (!System.IO.File.Exists(fileName) || overwrite)
{
new System.Net.WebClient().DownloadFile(url, fileName);
if (checkForWhiteFiles)
{
WhiteCheck(fileName);
}
}
processed = true;
x++;
}
catch (Exception e)
{
int wait = startSecsWait * tries;
Console.WriteLine(String.Format("There was a problem processing page {0} (x={1}, page={2}, pageSize={3}, collected={4})", page, x, page, pageSize, collected));
Console.WriteLine(e.Message);
if (tries < maxTries)
{
Console.WriteLine("Will retry in " + wait / 60 + " mins . . .");
}
System.Threading.Thread.Sleep(wait * 1000);
}
}
if (throttle > 0)
{
System.Threading.Thread.Sleep(throttle);
}
}
page++;
}
}
Console.WriteLine("Done");
}