static private BulkExport readBulkExportFromApi(RestClient client, string id, string credentials) { Console.WriteLine("reading bulkexport " + id + " from API"); RestRequest request = new RestRequest("api/documents/bulk_exports/{bulk_export_id}", Method.GET); request.AddUrlSegment("bulk_export_id", id); // replaces matching token in request.Resource // easily add HTTP Headers request.AddHeader("Authorization", credentials); request.AddHeader("x-api-version", "1"); request.AddHeader("x-api_key", Properties.Settings.Default.ApiKey); IRestResponse response = client.Execute(request); if (response.StatusCode == System.Net.HttpStatusCode.OK) { string content = response.Content; // raw content as string BulkExport deserializedBulkExport = new BulkExport(); System.IO.MemoryStream ms = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(content)); DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedBulkExport.GetType()); deserializedBulkExport = ser.ReadObject(ms) as BulkExport; ms.Close(); return(deserializedBulkExport); } else { string message = "Could not download zip-file, status code: " + response.StatusCode; if (response.ErrorMessage != null) { message += ":\n " + response.ErrorMessage; } addMessageToEmailBody(message); return(null); } }
static void Main(string[] args) { //populate list of SaveLocation with the SaveLocations setting string[] saveLocs = Properties.Settings.Default.SaveLocations.Split(';'); foreach (string saveLoc in saveLocs) { string[] splitLoc = saveLoc.Split(','); string id = splitLoc[0].Trim(); string savePath = splitLoc[1].Trim(); SaveLocation saveLocation = new SaveLocation(id, savePath); saveLocations.Add(saveLocation); } emailBody = ""; string credentials = "credentials u:" + (Properties.Settings.Default.Username) + " " + "pwd:" + (Properties.Settings.Default.Password); RestClient client = new RestClient(Properties.Settings.Default.Url); foreach (SaveLocation saveLoc in saveLocations) { string bulkExportId = saveLoc.id; string savePath = saveLoc.location; string zipPath = savePath + "\\" + bulkExportId + ".zip"; BulkExport bulkExport = readBulkExportFromApi(client, bulkExportId, credentials); if (bulkExport == null) { string message = "Could not retrieve bulkexport with id " + bulkExportId; addMessageToEmailBody(message); continue; //if we could not retrieve this bulkexport we continue with the next bulkexport } if (!bulkExport.can_download) { //send e-mailmessage that bulk export settings are not correct for download string message = "The bulkexport " + bulkExport.name + " is not configured to allow download (manually of via the API)"; addMessageToEmailBody(message); continue; } if (bulkExport.state == "ready") { try { DeleteBackups(bulkExportId, savePath); BackupBulkExport(savePath); //download new bulkexport, continue to next bulkexport if this fails. Errormessage is added to mail inside the DownloadBulkExport method if (!DownloadBulkExport(client, bulkExportId, credentials, zipPath, bulkExport.name)) { continue; } //extract new bulkexport ExtractBulkExport(zipPath, savePath); //delete backup if download en extract succeeds DeleteBackups(bulkExportId, savePath); DeleteZip(zipPath); } catch (Exception e) { string message = "An error occurred when handling the bulkexport " + bulkExport.name + ":\n" + e.Message; //addMessageToEmailBody(message); continue; } } else { string message = "The bulkexport '" + bulkExport.name + "' could not be downloaded, because the status of the bulkexport is '" + bulkExport.state + "'"; addMessageToEmailBody(message); } } if (emailBody != "") { SendEmail(); } Console.WriteLine("done"); if (Properties.Settings.Default.DebugMode) { Console.ReadLine(); } }