, , , , - , . , "" ( JSON), Session JSESSIONID (cookie), .
( , JSESSIONID, ), ( ).
, FSharp.Data <package id="FSharp.Data" version="2.3.1" targetFramework="net46" /> , , "" ( ) .
, JSON , , JSON- - , JSON, .
, .
, , , F #; -)
open FSharp.Data
[<Literal>]
let baseUrl = "https://jira"
[<Literal>]
let jiraUrlQuery = baseUrl + "/rest/api/2/search?jql=text%20~%20%22some text%22%20ORDER%20BY%20created%20DESC"
[<Literal>]
let loginUrl = "/rest/auth/1/session"
//[<Literal>]
let creds = sprintf "{\"username\": \"%s\", \"password\": \"%s\" }"
[<Literal>]
let loginInfoExample = "{\"session\":{\"name\":\"JSESSIONID\",\"value\":\"Γ₯æø8F95074F7398C68961708066EC6342A8\"},\"loginInfo\":{\"failedLoginCount\":7,\"loginCount\":434,\"lastFailedLoginTime\":\"2016-08-02T13:15:27.392+0200\",\"previousLoginTime\":\"2016-08-05T08:46:45.168+0200\"}}"
type LoginInfo = JsonProvider< loginInfoExample >
let login = Http.Request(baseUrl+loginUrl, httpMethod="POST", body=HttpRequestBody.TextRequest( creds "SomeUserName" "SomePassword" ), headers= [ "Content-Type", "application/json" ])
//let login = JsonValue.Request(baseUrl+loginUrl, httpMethod="POST", headers= [ "Content-Type", "application/json" ])
let getText =
function
| Text s -> s
| _ -> ""
let loggedIn = LoginInfo.Parse(getText login.Body).Session.Value.ToString()
type JiraIssues = JsonProvider< ".\JIRA\query.json" > //jiraUrlQuery>
let listOfCases = JiraIssues.Parse(Http.Request(jiraUrlQuery, cookies=["JSESSIONID", loggedIn] ).Body |> getText)
listOfCases.Issues |> Seq.map (fun x -> x.Fields.Summary, x.Fields.Created) |> Seq.sortByDescending (fun (s,c) -> c) |> Seq.iter (fun (s,c) -> printfn "%A: %s" c s)