// This script shows how to use M language (Power Query Formula Language) | |
// to read data from GitHub API v4 using a POST request. | |
// This can come in handy when building PowerBI reports that utilize GraphQL endpoints for loading data. | |
let | |
vUrl = "https://api.github.com/graphql", | |
vHeaders =[ | |
#"Method"="POST", | |
#"Content-Type"="application/json", | |
#"Authorization"="Bearer <your_personal_token_here>" | |
], | |
// Notice the quote escaping here | |
vContent=Text.ToBinary("{""query"": ""{ organization(login: \""github\"") { name }}""}"), | |
Source = Web.Contents(vUrl, [Headers=vHeaders, Content=vContent]), | |
#"JSON" = Json.Document(Source) | |
in | |
#"JSON" |
irykutrfk
commented
Jun 27, 2022
Hello all,
I need your help. I am trying to fetch the data from a graphql endpoint, exactly the way @petrsvihlik suggested. But I am receiving the 404 error.
My code in the advanced Query is as below:
let
vQuery= "{""query"": ""{
account(id: ""88f5d4e6-76b1-44ef-b7f3-f41655e08fe6"") {
id
name
strategies {
id
name
}
}
}",
vUrl = "https://demo.net/graphql",
vHeaders =[
#"Method"="POST",
#"Content-Type"="application/json",
#"Authorization"="Bearer 3523525135151f3r13f1f134134"
],
Source = Web.Contents(vUrl,
[Headers=vHeaders,
Content=Text.ToBinary(vQuery) ]
),
#"JSON" = Json.Document(Source)
in
#"JSON"
What am I doing wrong?
this is the error I see:
DataSource.Error: Web.Contents failed to get contents from 'https://demo.net/graphql' (400): Bad Request
Are you getting a 400 or 404?
In any case, I'd recommend using Fiddler to observe how your final request looks like nad comparing it with a manually assembled well-functioning request to see where the problem is.
@elimey , I think you may be having issue because your query is not in one line and there are linebreaks. I had similar issues as well and that's what fixed it.
@petrsvihlik on the topic of parameters, I am running a graphql query which pulls a list of team names and I would like to use that as parameter to get list of repo names, I understand that this may not be possible as the query storage type is Import vs Direct Query, is there alternative means to accomplish this objective? I had tried to follow the link you had shared in previous posts but I am not able to do what is described as the values I am getting is a list and I dont know how i can programmatically define the selected value in the query itself. Again, I think this may be a limitation of import vs direct query. I even created a table and entered the list in manually but I am not getting an option to do parameter binding on the actual parameter