/// <summary> /// Replace an existing photo on Flickr. /// </summary> /// <param name="stream">The <see cref="Stream"/> object containing the photo to be uploaded.</param> /// <param name="fileName">The filename of the file to replace the existing item with.</param> /// <param name="photoId">The ID of the photo to replace.</param> /// <returns>The id of the photograph after successful uploading.</returns> public string ReplacePicture(Stream stream, string fileName, string photoId) { var replaceUri = new Uri(ReplaceUrl); var parameters = new Dictionary <string, string> { { "photo_id", photoId } }; if (!string.IsNullOrEmpty(OAuthAccessToken)) { OAuthGetBasicParameters(parameters); parameters.Add("oauth_token", OAuthAccessToken); var sig = OAuthCalculateSignature("POST", replaceUri.AbsoluteUri, parameters, OAuthAccessTokenSecret); parameters.Add("oauth_signature", sig); } else { parameters.Add("api_key", apiKey); parameters.Add("auth_token", apiToken); } var responseXml = UploadData(stream, fileName, replaceUri, parameters); var t = new UnknownResponse(); ((IFlickrParsable)t).Load(responseXml); return(t.GetElementValue("photoid")); }
public string AuthGetFrob() { CheckSigned(); Dictionary <string, string> parameters = new Dictionary <string, string>(); parameters.Add("method", "flickr.auth.getFrob"); UnknownResponse response = GetResponseNoCache <UnknownResponse>(parameters); return(response.GetXmlDocument().SelectSingleNode("frob/text()").Value); }
/// <summary> /// Returns the url to a group's page. /// </summary> /// <param name="groupId">The NSID of the group to fetch the url for.</param> /// <returns>An instance of the <see cref="Uri"/> class containing the URL of the group page.</returns> public string UrlsGetGroup(string groupId) { Dictionary <string, string> parameters = new Dictionary <string, string>(); parameters.Add("method", "flickr.urls.getGroup"); parameters.Add("group_id", groupId); UnknownResponse response = GetResponseCache <UnknownResponse>(parameters); System.Xml.XmlNode node = response.GetXmlDocument().SelectSingleNode("*/@url"); return(node == null ? null : node.Value.Replace("http://", "https://")); }
/// <summary> /// Returns a group NSID, given the url to a group's page or photo pool. /// </summary> /// <param name="urlToFind">The url to the group's page or photo pool.</param> /// <returns>The ID of the group at the specified URL on success, a null reference (Nothing in Visual Basic) if the group cannot be found.</returns> public string UrlsLookupGroup(string urlToFind) { Dictionary <string, string> parameters = new Dictionary <string, string>(); parameters.Add("method", "flickr.urls.lookupGroup"); parameters.Add("api_key", apiKey); parameters.Add("url", urlToFind); UnknownResponse response = GetResponseCache <UnknownResponse>(parameters); System.Xml.XmlNode nav = response.GetXmlDocument().SelectSingleNode("*/@id"); return(nav == null ? null : nav.Value.Replace("http://", "https://")); }
/// <summary> /// Adds a new comment to a photoset. /// </summary> /// <param name="photosetId">The ID of the photoset to add the comment to.</param> /// <param name="commentText">The text of the comment. Can contain some HTML.</param> /// <returns>The new ID of the created comment.</returns> public string PhotosetsCommentsAddComment(string photosetId, string commentText) { Dictionary <string, string> parameters = new Dictionary <string, string>(); parameters.Add("method", "flickr.photosets.comments.addComment"); parameters.Add("photoset_id", photosetId); parameters.Add("comment_text", commentText); UnknownResponse response = GetResponseNoCache <UnknownResponse>(parameters); System.Xml.XmlNode nav = response.GetXmlDocument().SelectSingleNode("*/@id"); return(nav == null ? null : nav.Value); }
/// <summary> /// Replace an existing photo on Flickr. /// </summary> /// <param name="stream">The <see cref="Stream"/> object containing the photo to be uploaded.</param> /// <param name="fileName">The filename of the file to replace the existing item with.</param> /// <param name="photoId">The ID of the photo to replace.</param> /// <returns>The id of the photograph after successful uploading.</returns> public string ReplacePicture(Stream stream, string fileName, string photoId) { var replaceUri = new Uri(ReplaceUrl); var parameters = new Dictionary <string, string> { { "photo_id", photoId } }; if (!string.IsNullOrEmpty(OAuthAccessToken)) { OAuthGetBasicParameters(parameters); parameters.Add("oauth_token", OAuthAccessToken); var sig = OAuthCalculateSignature("POST", replaceUri.AbsoluteUri, parameters, OAuthAccessTokenSecret); parameters.Add("oauth_signature", sig); } else { parameters.Add("api_key", apiKey); parameters.Add("auth_token", apiToken); } var responseXml = UploadData(stream, fileName, replaceUri, parameters); var settings = new XmlReaderSettings { IgnoreWhitespace = true }; var reader = XmlReader.Create(new StringReader(responseXml), settings); if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") { throw ExceptionHandler.CreateResponseException(reader); } } reader.MoveToElement(); reader.Read(); var t = new UnknownResponse(); ((IFlickrParsable)t).Load(reader); return(t.GetElementValue("photoid")); }
/// <summary> /// Returns the url to a user's profile. /// </summary> /// <param name="userId">The NSID of the user to fetch the url for. If omitted, the calling user is assumed.</param> /// <returns>An instance of the <see cref="Uri"/> class containing the URL for the users profile.</returns> public string UrlsGetUserProfile(string userId) { Dictionary <string, string> parameters = new Dictionary <string, string>(); parameters.Add("method", "flickr.urls.getUserProfile"); if (userId != null && userId.Length > 0) { parameters.Add("user_id", userId); } UnknownResponse response = GetResponseCache <UnknownResponse>(parameters); System.Xml.XmlNode nav = response.GetXmlDocument().SelectSingleNode("*/@url"); return(nav == null ? null : nav.Value.Replace("http://", "https://")); }
/// <summary> /// Get a list of current 'Pandas' supported by Flickr. /// </summary> /// <returns>An array of panda names.</returns> public string[] PandaGetList() { var parameters = new Dictionary <string, string>(); parameters.Add("method", "flickr.panda.getList"); UnknownResponse response = GetResponseCache <UnknownResponse>(parameters); var pandas = new List <string>(); foreach (System.Xml.XmlNode n in response.GetXmlDocument().SelectNodes("//panda/text()")) { pandas.Add(n.Value); } return(pandas.ToArray()); }
/// <summary> /// Add a note to a picture. /// </summary> /// <param name="photoId">The photo id to add the note to.</param> /// <param name="noteX">The X co-ordinate of the upper left corner of the note.</param> /// <param name="noteY">The Y co-ordinate of the upper left corner of the note.</param> /// <param name="noteWidth">The width of the note.</param> /// <param name="noteHeight">The height of the note.</param> /// <param name="noteText">The text in the note.</param> /// <returns></returns> public string PhotosNotesAdd(string photoId, int noteX, int noteY, int noteWidth, int noteHeight, string noteText) { var parameters = new Dictionary <string, string>(); parameters.Add("method", "flickr.photos.notes.add"); parameters.Add("photo_id", photoId); parameters.Add("note_x", noteX.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); parameters.Add("note_y", noteY.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); parameters.Add("note_w", noteWidth.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); parameters.Add("note_h", noteHeight.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); parameters.Add("note_text", noteText); UnknownResponse response = GetResponseCache <UnknownResponse>(parameters); System.Xml.XmlNode node = response.GetXmlDocument().SelectSingleNode("*/@id"); return(node == null ? null : node.Value); }
/// <summary> /// Replace an existing photo on Flickr. /// </summary> /// <param name="stream">The <see cref="Stream"/> object containing the photo to be uploaded.</param> /// <param name="fileName">The filename of the file to replace the existing item with.</param> /// <param name="photoId">The ID of the photo to replace.</param> /// <returns>The id of the photograph after successful uploading.</returns> public string ReplacePicture(Stream stream, string fileName, string photoId) { Uri replaceUri = new Uri(ReplaceUrl); Dictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("photo_id", photoId); if (!String.IsNullOrEmpty(OAuthAccessToken)) { OAuthGetBasicParameters(parameters); parameters.Add("oauth_token", OAuthAccessToken); string sig = OAuthCalculateSignature("POST", replaceUri.AbsoluteUri, parameters, OAuthAccessTokenSecret); parameters.Add("oauth_signature", sig); } else { parameters.Add("api_key", apiKey); parameters.Add("auth_token", apiToken); } string responseXml = UploadData(stream, fileName, replaceUri, parameters); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; XmlReader reader = XmlReader.Create(new StringReader(responseXml), settings); if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") throw ExceptionHandler.CreateResponseException(reader); continue; } reader.MoveToElement(); reader.Read(); UnknownResponse t = new UnknownResponse(); ((IFlickrParsable)t).Load(reader); return t.GetElementValue("photoid"); }
/// <summary> /// Gets the currently authenticated users default safety level. /// </summary> /// <returns></returns> public SafetyLevel PrefsGetSafetyLevel() { CheckRequiresAuthentication(); var parameters = new Dictionary <string, string>(); parameters.Add("method", "flickr.prefs.getSafetyLevel"); UnknownResponse response = GetResponseCache <UnknownResponse>(parameters); System.Xml.XmlNode nav = response.GetXmlDocument().SelectSingleNode("*/@safety_level"); if (nav == null) { throw new ParsingException("Unable to find safety level in returned XML."); } return((SafetyLevel)int.Parse(nav.Value, System.Globalization.NumberFormatInfo.InvariantInfo)); }
/// <summary> /// Gets the currently authenticated users default hidden from search setting. /// </summary> /// <returns></returns> public HiddenFromSearch PrefsGetHidden() { CheckRequiresAuthentication(); Dictionary <string, string> parameters = new Dictionary <string, string>(); parameters.Add("method", "flickr.prefs.getHidden"); UnknownResponse response = GetResponseCache <UnknownResponse>(parameters); System.Xml.XmlNode nav = response.GetXmlDocument().SelectSingleNode("*/@hidden"); if (nav == null) { throw new ParsingException("Unable to find hidden preference in returned XML."); } return((HiddenFromSearch)int.Parse(nav.Value, System.Globalization.NumberFormatInfo.InvariantInfo)); }
private void UploadDataAsync(Stream imageStream, string fileName, Uri uploadUri, Dictionary<string, string> parameters, Action<FlickrResult<string>> callback) { string boundary = "FLICKR_MIME_" + DateTime.Now.ToString("yyyyMMddhhmmss", System.Globalization.DateTimeFormatInfo.InvariantInfo); string authHeader = FlickrResponder.OAuthCalculateAuthHeader(parameters); byte[] dataBuffer = CreateUploadData(imageStream, fileName, parameters, boundary); HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(uploadUri); req.Method = "POST"; req.ContentType = "multipart/form-data; boundary=" + boundary; if (!String.IsNullOrEmpty(authHeader)) { req.Headers["Authorization"] = authHeader; } req.BeginGetRequestStream( r => { Stream s = req.EndGetRequestStream(r); int bufferSize = 1024 * 32; int soFar = 0; while (soFar < dataBuffer.Length) { s.Write(dataBuffer, soFar, Math.Min(bufferSize, dataBuffer.Length - soFar)); soFar += bufferSize; if (OnUploadProgress != null) { UploadProgressEventArgs args = new UploadProgressEventArgs(soFar, dataBuffer.Length); OnUploadProgress(this, args); } } s.Close(); req.BeginGetResponse( r2 => { FlickrResult<string> result = new FlickrResult<string>(); try { WebResponse res = req.EndGetResponse(r2); StreamReader sr = new StreamReader(res.GetResponseStream()); string responseXml = sr.ReadToEnd(); sr.Close(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; XmlReader reader = XmlReader.Create(new StringReader(responseXml), settings); if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") throw ExceptionHandler.CreateResponseException(reader); continue; } reader.MoveToElement(); reader.Read(); UnknownResponse t = new UnknownResponse(); ((IFlickrParsable)t).Load(reader); result.Result = t.GetElementValue("photoid"); result.HasError = false; } catch (Exception ex) { if (ex is WebException) { OAuthException oauthEx = new OAuthException(ex); if (String.IsNullOrEmpty(oauthEx.Message)) result.Error = ex; else result.Error = oauthEx; } else { result.Error = ex; } } callback(result); }, this); }, this); }
/// <summary> /// UploadPicture method that does all the uploading work. /// </summary> /// <param name="stream">The <see cref="Stream"/> object containing the pphoto to be uploaded.</param> /// <param name="fileName">The filename of the file to upload. Used as the title if title is null.</param> /// <param name="title">The title of the photo (optional).</param> /// <param name="description">The description of the photograph (optional).</param> /// <param name="tags">The tags for the photograph (optional).</param> /// <param name="isPublic">false for private, true for public.</param> /// <param name="isFamily">true if visible to family.</param> /// <param name="isFriend">true if visible to friends only.</param> /// <param name="contentType">The content type of the photo, i.e. Photo, Screenshot or Other.</param> /// <param name="safetyLevel">The safety level of the photo, i.e. Safe, Moderate or Restricted.</param> /// <param name="hiddenFromSearch">Is the photo hidden from public searches.</param> /// <returns>The id of the photograph after successful uploading.</returns> public string UploadPicture(Stream stream, string fileName, string title, string description, string tags, bool isPublic, bool isFamily, bool isFriend, ContentType contentType, SafetyLevel safetyLevel, HiddenFromSearch hiddenFromSearch) { CheckRequiresAuthentication(); var uploadUri = new Uri(UploadUrl); var parameters = new Dictionary <string, string>(); if (!string.IsNullOrEmpty(title)) { parameters.Add("title", title); } if (!string.IsNullOrEmpty(description)) { parameters.Add("description", description); } if (!string.IsNullOrEmpty(tags)) { parameters.Add("tags", tags); } parameters.Add("is_public", isPublic ? "1" : "0"); parameters.Add("is_friend", isFriend ? "1" : "0"); parameters.Add("is_family", isFamily ? "1" : "0"); if (safetyLevel != SafetyLevel.None) { parameters.Add("safety_level", safetyLevel.ToString("D")); } if (contentType != ContentType.None) { parameters.Add("content_type", contentType.ToString("D")); } if (hiddenFromSearch != HiddenFromSearch.None) { parameters.Add("hidden", hiddenFromSearch.ToString("D")); } if (!string.IsNullOrEmpty(OAuthAccessToken)) { OAuthGetBasicParameters(parameters); parameters.Add("oauth_token", OAuthAccessToken); string sig = OAuthCalculateSignature("POST", uploadUri.AbsoluteUri, parameters, OAuthAccessTokenSecret); parameters.Add("oauth_signature", sig); } else { parameters.Add("api_key", apiKey); parameters.Add("auth_token", apiToken); } string responseXml = UploadData(stream, fileName, uploadUri, parameters); var settings = new XmlReaderSettings { IgnoreWhitespace = true }; var reader = XmlReader.Create(new StringReader(responseXml), settings); if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") { throw ExceptionHandler.CreateResponseException(reader); } } reader.MoveToElement(); reader.Read(); var t = new UnknownResponse(); ((IFlickrParsable)t).Load(reader); return(t.GetElementValue("photoid")); }
private void UploadDataAsync(Stream imageStream, string fileName, Uri uploadUri, Dictionary <string, string> parameters, Action <FlickrResult <string> > callback) { string boundary = "FLICKR_MIME_" + DateTime.Now.ToString("yyyyMMddhhmmss", System.Globalization.DateTimeFormatInfo.InvariantInfo); string authHeader = FlickrResponder.OAuthCalculateAuthHeader(parameters); var dataBuffer = CreateUploadData(imageStream, fileName, parameters, boundary); var req = (HttpWebRequest)WebRequest.Create(uploadUri); req.Method = "POST"; req.ContentType = "multipart/form-data; boundary=" + boundary; #if (!SILVERLIGHT && !WINDOWS_PHONE) req.SendChunked = true; #endif req.AllowWriteStreamBuffering = false; if (!string.IsNullOrEmpty(authHeader)) { req.Headers["Authorization"] = authHeader; } req.BeginGetRequestStream( r => { var result = new FlickrResult <string>(); using (var reqStream = req.EndGetRequestStream(r)) { try { var bufferSize = 32 * 1024; if (dataBuffer.Length / 100 > bufferSize) { bufferSize = bufferSize * 2; } dataBuffer.UploadProgress += (o, e) => { if (OnUploadProgress != null) { OnUploadProgress(this, e); } }; dataBuffer.CopyTo(reqStream, bufferSize); reqStream.Close(); } catch (Exception ex) { result.Error = ex; callback(result); } } req.BeginGetResponse( r2 => { try { var res = req.EndGetResponse(r2); var sr = new StreamReader(res.GetResponseStream()); var responseXml = sr.ReadToEnd(); sr.Close(); var t = new UnknownResponse(); ((IFlickrParsable)t).Load(responseXml); result.Result = t.GetElementValue("photoid"); result.HasError = false; } catch (Exception ex) { if (ex is WebException) { var oauthEx = new OAuthException(ex); result.Error = string.IsNullOrEmpty(oauthEx.Message) ? ex : oauthEx; } else { result.Error = ex; } } callback(result); }, this); }, this); }
/// <summary> /// UploadPicture method that does all the uploading work. /// </summary> /// <param name="stream">The <see cref="Stream"/> object containing the pphoto to be uploaded.</param> /// <param name="fileName">The filename of the file to upload. Used as the title if title is null.</param> /// <param name="title">The title of the photo (optional).</param> /// <param name="description">The description of the photograph (optional).</param> /// <param name="tags">The tags for the photograph (optional).</param> /// <param name="isPublic">false for private, true for public.</param> /// <param name="isFamily">true if visible to family.</param> /// <param name="isFriend">true if visible to friends only.</param> /// <param name="contentType">The content type of the photo, i.e. Photo, Screenshot or Other.</param> /// <param name="safetyLevel">The safety level of the photo, i.e. Safe, Moderate or Restricted.</param> /// <param name="hiddenFromSearch">Is the photo hidden from public searches.</param> /// <returns>The id of the photograph after successful uploading.</returns> public string UploadPicture(Stream stream, string fileName, string title, string description, string tags, bool isPublic, bool isFamily, bool isFriend, ContentType contentType, SafetyLevel safetyLevel, HiddenFromSearch hiddenFromSearch) { CheckRequiresAuthentication(); Uri uploadUri = new Uri(UploadUrl); Dictionary<string, string> parameters = new Dictionary<string, string>(); if (title != null && title.Length > 0) { parameters.Add("title", title); } if (description != null && description.Length > 0) { parameters.Add("description", description); } if (tags != null && tags.Length > 0) { parameters.Add("tags", tags); } parameters.Add("is_public", isPublic ? "1" : "0"); parameters.Add("is_friend", isFriend ? "1" : "0"); parameters.Add("is_family", isFamily ? "1" : "0"); if (safetyLevel != SafetyLevel.None) { parameters.Add("safety_level", safetyLevel.ToString("D")); } if (contentType != ContentType.None) { parameters.Add("content_type", contentType.ToString("D")); } if (hiddenFromSearch != HiddenFromSearch.None) { parameters.Add("hidden", hiddenFromSearch.ToString("D")); } if (!String.IsNullOrEmpty(OAuthAccessToken)) { OAuthGetBasicParameters(parameters); parameters.Add("oauth_token", OAuthAccessToken); string sig = OAuthCalculateSignature("POST", uploadUri.AbsoluteUri, parameters, OAuthAccessTokenSecret); parameters.Add("oauth_signature", sig); } else { parameters.Add("api_key", apiKey); parameters.Add("auth_token", apiToken); } string responseXml = UploadData(stream, fileName, uploadUri, parameters); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; XmlReader reader = XmlReader.Create(new StringReader(responseXml), settings); if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") throw ExceptionHandler.CreateResponseException(reader); continue; } reader.MoveToElement(); reader.Read(); UnknownResponse t = new UnknownResponse(); ((IFlickrParsable)t).Load(reader); return t.GetElementValue("photoid"); }
private void UploadDataAsync(Stream imageStream, string fileName, Uri uploadUri, Dictionary<string, string> parameters, Action<FlickrResult<string>> callback) { string boundary = "FLICKR_MIME_" + DateTime.Now.ToString("yyyyMMddhhmmss", System.Globalization.DateTimeFormatInfo.InvariantInfo); string authHeader = FlickrResponder.OAuthCalculateAuthHeader(parameters); var dataBuffer = CreateUploadData(imageStream, fileName, parameters, boundary); var req = WebRequest.Create(uploadUri); req.Method = "POST"; req.ContentType = "multipart/form-data; boundary=" + boundary; if (!string.IsNullOrEmpty(authHeader)) { req.Headers["Authorization"] = authHeader; } req.BeginGetRequestStream( r => { using (var reqStream = req.EndGetRequestStream(r)) { var bufferSize = 32 * 1024; if (dataBuffer.Length / 100 > bufferSize) bufferSize = bufferSize * 2; dataBuffer.UploadProgress += (o, e) => { if (OnUploadProgress != null) OnUploadProgress(this, e); }; dataBuffer.CopyTo(reqStream, bufferSize); reqStream.Close(); } req.BeginGetResponse( r2 => { var result = new FlickrResult<string>(); try { var res = req.EndGetResponse(r2); var sr = new StreamReader(res.GetResponseStream()); var responseXml = sr.ReadToEnd(); sr.Close(); var settings = new XmlReaderSettings {IgnoreWhitespace = true}; var reader = XmlReader.Create(new StringReader(responseXml), settings); if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") throw ExceptionHandler.CreateResponseException(reader); } reader.MoveToElement(); reader.Read(); var t = new UnknownResponse(); ((IFlickrParsable)t).Load(reader); result.Result = t.GetElementValue("photoid"); result.HasError = false; } catch (Exception ex) { if (ex is WebException) { var oauthEx = new OAuthException(ex); result.Error = string.IsNullOrEmpty(oauthEx.Message) ? ex : oauthEx; } else { result.Error = ex; } } callback(result); }, this); }, this); }
private void UploadDataAsync(Stream imageStream, string fileName, Uri uploadUri, Dictionary <string, string> parameters, Action <FlickrResult <string> > callback) { string boundary = "FLICKR_MIME_" + DateTime.Now.ToString("yyyyMMddhhmmss", System.Globalization.DateTimeFormatInfo.InvariantInfo); string authHeader = FlickrResponder.OAuthCalculateAuthHeader(parameters); var dataBuffer = CreateUploadData(imageStream, fileName, parameters, boundary); var req = WebRequest.Create(uploadUri); req.Method = "POST"; req.ContentType = "multipart/form-data; boundary=" + boundary; if (!String.IsNullOrEmpty(authHeader)) { req.Headers["Authorization"] = authHeader; } req.BeginGetRequestStream( r => { using (var reqStream = req.EndGetRequestStream(r)) { var bufferSize = 32 * 1024; if (dataBuffer.Length / 100 > bufferSize) { bufferSize = bufferSize * 2; } dataBuffer.UploadProgress += (o, e) => { if (OnUploadProgress != null) { OnUploadProgress(this, e); } }; dataBuffer.CopyTo(reqStream, bufferSize); reqStream.Close(); } req.BeginGetResponse( r2 => { var result = new FlickrResult <string>(); try { var res = req.EndGetResponse(r2); var sr = new StreamReader(res.GetResponseStream()); var responseXml = sr.ReadToEnd(); sr.Close(); var settings = new XmlReaderSettings { IgnoreWhitespace = true }; var reader = XmlReader.Create(new StringReader(responseXml), settings); if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") { throw ExceptionHandler.CreateResponseException(reader); } } reader.MoveToElement(); reader.Read(); var t = new UnknownResponse(); ((IFlickrParsable)t).Load(reader); result.Result = t.GetElementValue("photoid"); result.HasError = false; } catch (Exception ex) { if (ex is WebException) { var oauthEx = new OAuthException(ex); result.Error = String.IsNullOrEmpty(oauthEx.Message) ? ex : oauthEx; } else { result.Error = ex; } } callback(result); }, this); }, this); }
/// <summary> /// UploadPicture method that does all the uploading work. /// </summary> /// <param name="stream">The <see cref="Stream"/> object containing the pphoto to be uploaded.</param> /// <param name="fileName">The filename of the file to upload. Used as the title if title is null.</param> /// <param name="title">The title of the photo (optional).</param> /// <param name="description">The description of the photograph (optional).</param> /// <param name="tags">The tags for the photograph (optional).</param> /// <param name="isPublic">false for private, true for public.</param> /// <param name="isFamily">true if visible to family.</param> /// <param name="isFriend">true if visible to friends only.</param> /// <param name="contentType">The content type of the photo, i.e. Photo, Screenshot or Other.</param> /// <param name="safetyLevel">The safety level of the photo, i.e. Safe, Moderate or Restricted.</param> /// <param name="hiddenFromSearch">Is the photo hidden from public searches.</param> /// <returns>The id of the photograph after successful uploading.</returns> public string UploadPicture(Stream stream, string fileName, string title, string description, string tags, bool isPublic, bool isFamily, bool isFriend, ContentType contentType, SafetyLevel safetyLevel, HiddenFromSearch hiddenFromSearch) { CheckRequiresAuthentication(); var uploadUri = new Uri(UploadUrl); var parameters = new Dictionary <string, string>(); if (!string.IsNullOrEmpty(title)) { parameters.Add("title", title); } if (!string.IsNullOrEmpty(description)) { parameters.Add("description", description); } if (!string.IsNullOrEmpty(tags)) { parameters.Add("tags", tags); } parameters.Add("is_public", isPublic ? "1" : "0"); parameters.Add("is_friend", isFriend ? "1" : "0"); parameters.Add("is_family", isFamily ? "1" : "0"); if (safetyLevel != SafetyLevel.None) { parameters.Add("safety_level", safetyLevel.ToString("D")); } if (contentType != ContentType.None) { parameters.Add("content_type", contentType.ToString("D")); } if (hiddenFromSearch != HiddenFromSearch.None) { parameters.Add("hidden", hiddenFromSearch.ToString("D")); } if (!string.IsNullOrEmpty(OAuthAccessToken)) { OAuthGetBasicParameters(parameters); parameters.Add("oauth_token", OAuthAccessToken); string sig = OAuthCalculateSignature("POST", uploadUri.AbsoluteUri, parameters, OAuthAccessTokenSecret); parameters.Add("oauth_signature", sig); } else { parameters.Add("api_key", apiKey); parameters.Add("auth_token", apiToken); } string responseXml = UploadData(stream, fileName, uploadUri, parameters); var t = new UnknownResponse(); ((IFlickrParsable)t).Load(responseXml); return(t.GetElementValue("photoid")); }
private void UploadDataAsync(Stream imageStream, string fileName, Uri uploadUri, Dictionary <string, string> parameters, Action <FlickrResult <string> > callback) { string boundary = "FLICKR_MIME_" + DateTime.Now.ToString("yyyyMMddhhmmss", System.Globalization.DateTimeFormatInfo.InvariantInfo); string authHeader = FlickrResponder.OAuthCalculateAuthHeader(parameters); byte[] dataBuffer = CreateUploadData(imageStream, fileName, parameters, boundary); HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(uploadUri); req.Method = "POST"; req.ContentType = "multipart/form-data; boundary=" + boundary; if (!String.IsNullOrEmpty(authHeader)) { req.Headers["Authorization"] = authHeader; } req.BeginGetRequestStream( r => { Stream s = req.EndGetRequestStream(r); int bufferSize = 1024 * 32; int soFar = 0; while (soFar < dataBuffer.Length) { if ((dataBuffer.Length - soFar) < bufferSize) { bufferSize = dataBuffer.Length - soFar; } s.Write(dataBuffer, soFar, bufferSize); soFar += bufferSize; if (OnUploadProgress != null) { UploadProgressEventArgs args = new UploadProgressEventArgs(soFar, dataBuffer.Length); OnUploadProgress(this, args); } } req.BeginGetResponse( r2 => { FlickrResult <string> result = new FlickrResult <string>(); try { WebResponse res = req.EndGetResponse(r2); StreamReader sr = new StreamReader(res.GetResponseStream()); string responseXml = sr.ReadToEnd(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; XmlReader reader = XmlReader.Create(new StringReader(responseXml), settings); if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") { throw ExceptionHandler.CreateResponseException(reader); } continue; } reader.MoveToElement(); reader.Read(); UnknownResponse t = new UnknownResponse(); ((IFlickrParsable)t).Load(reader); result.Result = t.GetElementValue("photoid"); result.HasError = false; } catch (Exception ex) { if (ex is WebException) { OAuthException oauthEx = new OAuthException(ex); if (String.IsNullOrEmpty(oauthEx.Message)) { result.Error = ex; } else { result.Error = oauthEx; } } else { result.Error = ex; } } callback(result); }, this); }, this); }