예제 #1
0
        /// <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");
            }
        }
예제 #2
0
        /// <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);
                }
            }
        }
예제 #3
0
        /// <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&lt;System.String&gt;.</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);
        }