/// <summary> /// Downloads the facebook URL. /// </summary> /// <param name="filePath">The file path.</param> /// <param name="pathAndQuery">The path and query.</param> /// <param name="attributes">The attributes.</param> /// <param name="postData">The post data.</param> /// <param name="skipEmptyFile">The skip empty file.</param> /// <param name="interceptResponse">The intercept response.</param> /// <returns>System.String.</returns> /// <exception cref="System.ArgumentOutOfRangeException">skipEmptyFile</exception> /// <exception cref="ArgumentOutOfRangeException">skipEmptyFile</exception> public async Task <string> DownloadFacebookUrlAsync(string filePath, string pathAndQuery, object attributes = null, string postData = null, FacebookSkipEmptyFile skipEmptyFile = FacebookSkipEmptyFile.None, Action <Stream, Stream> interceptResponse = null) { var url = pathAndQuery.ExpandPathAndQuery(attributes); _logger("DownloadFacebookUrl: " + url); var file = await this.TryFuncAsync(typeof(WebException), () => this.DownloadFileAsync(filePath, HttpMethod.Get, url, postData, interceptResponse : interceptResponse)).ConfigureAwait(false); switch (skipEmptyFile) { case FacebookSkipEmptyFile.None: return(file); case FacebookSkipEmptyFile.ZeroLength: if (File.ReadAllBytes(file).Length == 0) { File.Delete(file); return(null); } return(file); case FacebookSkipEmptyFile.TextHasSecondLine: if (File.ReadAllLines(file).Length <= 1) { File.Delete(file); return(null); } return(file); default: throw new ArgumentOutOfRangeException("skipEmptyFile"); } }
/// <summary> /// Downloads the lead form CSV by page. /// </summary> /// <param name="path">The path.</param> /// <param name="pageId">The page identifier.</param> /// <param name="fromDate">From date.</param> /// <param name="toDate">To date.</param> /// <param name="skipEmptyFile">The skip empty file.</param> /// <returns></returns> public IEnumerable <string> DownloadLeadFormCsvByPage(string path, long pageId, DateTime?fromDate, DateTime?toDate, FacebookSkipEmptyFile skipEmptyFile = FacebookSkipEmptyFile.None) { _logger("DownloadLeadFormCsvByPage: " + pageId); EnsureAppIdAndSecret(); EnsureRequestedScope(); var maps = LoadCsvPageMaps(path, pageId); var query = GetLeadFormsByPage(pageId) .Select(x => new { id = x["id"], name = (string)x["name"], url = ToBusinessUrl((string)x["leadgen_export_csv_url"]) }); CsvPageMap[] map; foreach (var item in query) { _logger(item.id.ToString() + " - " + item.name); var file = DownloadFacebookUrl(path, item.url, new { from_date = (fromDate != null ? (int?)ToTimestamp(fromDate.Value) : null), to_date = (toDate != null ? (int?)ToTimestamp(toDate.Value) : null), }, null, skipEmptyFile, (maps.TryGetValue(item.id.ToString(), out map) ? (Action <Stream, Stream>)((a, b) => CsvPageIntercept(item.id.ToString(), map, a, b)) : null)); if (file != null) { yield return(file); } } }
/// <summary> /// Downloads the lead form CSV by page. /// </summary> /// <param name="path">The path.</param> /// <param name="pageId">The page identifier.</param> /// <param name="fromDate">From date.</param> /// <param name="toDate">To date.</param> /// <param name="skipEmptyFile">The skip empty file.</param> /// <returns>IEnumerable<System.String>.</returns> public async Task <IEnumerable <string> > DownloadLeadFormCsvByPageAsync(string path, long pageId, DateTime?fromDate, DateTime?toDate, FacebookSkipEmptyFile skipEmptyFile = FacebookSkipEmptyFile.None) { _logger($"DownloadLeadFormCsvByPage: {pageId}"); EnsureAppIdAndSecret(); EnsureRequestedScope(); var maps = LoadCsvPageMaps(path, pageId); var list = new List <string>(); foreach (var x in await GetLeadFormsByPageAsync(pageId).ConfigureAwait(false)) { var id = x["id"].ToString(); var name = (string)x["name"]; var url = ToBusinessUrl((string)x["leadgen_export_csv_url"]); _logger($"{id} - {name}"); var file = await DownloadFacebookUrlAsync(path, url, new { from_date = fromDate != null ? (int?)ToTimestamp(fromDate.Value) : null, to_date = toDate != null ? (int?)ToTimestamp(toDate.Value) : null, }, null, skipEmptyFile, maps.TryGetValue(id, out var map)?(Action <Stream, Stream>)((a, b) => CsvPageIntercept(id, map, a, b)) : null).ConfigureAwait(false); if (file != null) { list.Add(file); } } return(list); }