I aim to call Bing News Search via API to get results matching a certain query.
I am using Zapier. I am using the Code step, which can take either Python of Javascript. I currently have Python code to call the API as follows...
headers = {
'Content-Type': 'text/plain',
'Ocp-Apim-Subscription-Key': 'my_api_key'
}
r = requests.get('https://api.cognitive.microsoft.com/bing/v7.0/news/search?q=%22Donald%20Trump%22&textDecorations=true&textFormat=HTML&sortBy=Date&freshness=Day', headers=headers)
output = [{'assets': r.json()}]
This works fine. It successfully calls and gets results.
The problem is, when I want to use the content of those results in a subsequent Zapier step, they are all mashed together in the same response object - that is, each equivalent value from multiple returned interior story objects is all placed in the same available Zapier value, separated by comma.
Example: the available "category" value is "null, null, null, World, null, Politics, Politics, Politics, null, null", for 10 stories returned in the object - but it should only be ONE of those, for one story.
In other words, how do I individualise assets/objects in order to let Zapier process them individually?
I'd say this isn't just about parsing out the values, but doing so in a way that Zapier can understand. However, I have done it once before, in a different language...
By means of example for this same principle, I have a separate zap for another purpose which does a similar thing. It takes incoming Gmail emails and checks the body (inputData.body) for strings matching a certain pattern. There may be multiple such strings. For each of those, the following Javascript passes each multiple of them to the next Zapier step individually.
// stores an array of any length (0 or more) with the matches
var matches = inputData.body.match(/\b[\w-]{32}\b/g)
if (matches == null) {
return { str: "false" }
}
return matches.map(function (m) { return {str: m} })
This magically allows my subsequent zap steps to only act in respect of individual strings, not a group of multiple. How can I achieve a similar effect in my above API code?
The last lines of each code sample seem to hold the key... in Javascript, mapping something something something... ?
Here is a sample response, per request...
{
"_type": "News",
"readLink": "https://api.cognitive.microsoft.com/api/v7/news/search?q=%22Donald+Trump%22",
"queryContext": {
"originalQuery": "\"Donald Trump\"",
"adultIntent": false
},
"totalEstimatedMatches": 73200,
"sort": [
{
"name": "Best match",
"id": "relevance",
"isSelected": false,
"url": "https://api.cognitive.microsoft.com/api/v7/news/search?q=%22Donald+Trump%22"
},
{
"name": "Most recent",
"id": "date",
"isSelected": true,
"url": "https://api.cognitive.microsoft.com/api/v7/news/search?q=%22Donald+Trump%22&sortby=date"
}
],
"value": [
{
"name": "Democrats to <b>Donald Trump</b>: Here's a Bill to Outlaw Family Separation",
"url": "https://www.rollingstone.com/politics/news/democrats-give-trump-a-bill-to-outlaw-family-separation-w521650",
"image": {
"thumbnail": {
"contentUrl": "https://www.bing.com/th?id=ON.E5F488C11B8B2C7578200936C34BA0C3&pid=News",
"width": 700,
"height": 394
}
},
"description": "All 49 Democrats in the Senate have signed on to a bill that would end Trump's policy of "child-snatching" A two-year-old Honduran asylum seeker cries as her mother is searched and detained near the U.S.-Mexico border on June 12th, 2018 in McAllen, Texas.",
"about": [
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/1a466af2-ed23-25bd-794d-1ca925e4681b",
"name": "Donald Trump"
},
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/5e00ddc3-bb67-a2c7-702a-929095be2f19",
"name": "Bill"
}
],
"provider": [
{
"_type": "Organization",
"name": "Rolling Stone"
}
],
"datePublished": "2018-06-19T09:39:00.0000000Z",
"category": "Politics"
},
{
"name": "Republicans break from Trump on migrant family separation",
"url": "https://www.nbcnews.com/politics/first-read/republicans-break-trump-migrant-family-separation-n884171",
"image": {
"thumbnail": {
"contentUrl": "https://www.bing.com/th?id=ON.7225F1783FD189C842151F29E579409A&pid=News",
"width": 700,
"height": 367
}
},
"description": "WASHINGTON — The lowest points of <b>Donald Trump</b>’s presidency have tended to occur when a sizable portion of his own party has criticized him for his actions, policies and statements (even when the GOP doesn’t necessarily act on that criticism).",
"about": [
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/1a466af2-ed23-25bd-794d-1ca925e4681b",
"name": "Donald Trump"
}
],
"provider": [
{
"_type": "Organization",
"name": "NBC News"
}
],
"datePublished": "2018-06-19T09:38:00.0000000Z",
"category": "Politics"
},
{
"name": "Anger mounts against Trump over child separation policy",
"url": "https://www.aljazeera.com/news/2018/06/anger-mounts-trump-child-separation-policy-180618071221478.html",
"image": {
"thumbnail": {
"contentUrl": "https://www.bing.com/th?id=ON.B6724EE606A4241FC8E9441331E20A67&pid=News",
"width": 700,
"height": 392
}
},
"description": "Pressure is mounting on US President <b>Donald Trump</b> to reverse his policy of separating children from refugees and migrants who cross the US-Mexico border. "Families belong together," protesters chanted on Sunday, as hundreds gathered outside detention ...",
"about": [
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/1a466af2-ed23-25bd-794d-1ca925e4681b",
"name": "Donald Trump"
}
],
"provider": [
{
"_type": "Organization",
"name": "Al Jazeera English"
}
],
"datePublished": "2018-06-19T09:38:00.0000000Z",
"category": "Politics"
},
{
"name": "President Trump Defends Immigration Policy, Says He Won't Let U.S. Became a 'Migrant Camp'",
"url": "https://www.msn.com/en-us/news/other/president-trump-defends-immigration-policy-says-he-wont-let-us-became-a-migrant-camp/ar-AAyOCt4",
"image": {
"thumbnail": {
"contentUrl": "https://www.bing.com/th?id=ON.303D80992671B38688C86FEFC0F5F4B2&pid=News",
"width": 700,
"height": 498
}
},
"description": "WASHINGTON — Facing rising outrage from some Republicans as well as Democrats over the forced separation of migrant children and parents at the U.S.-Mexico border, President <b>Donald Trump</b> dug in Monday, again falsely blaming Democrats and declaring he ...",
"about": [
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/1a466af2-ed23-25bd-794d-1ca925e4681b",
"name": "Donald Trump"
}
],
"mentions": [
{
"name": "Donald Trump"
},
{
"name": "United States"
},
{
"name": "Migrant worker"
}
],
"provider": [
{
"_type": "Organization",
"name": "Time"
}
],
"datePublished": "2018-06-19T09:36:00.0000000Z",
"category": "Politics"
},
{
"name": "Watch: <b>Donald Trump</b> awkwardly salutes a North Korean general at Singapore summit",
"url": "https://scroll.in/video/882762/watch-donald-trump-awkwardly-salutes-a-north-korean-general-at-singapore-summit",
"image": {
"thumbnail": {
"contentUrl": "https://www.bing.com/th?id=ON.D99B1336CDD2C22BFBD080E78C100052&pid=News",
"width": 600,
"height": 315
}
},
"description": "The North Korean state media aired a documentary on the recent Singapore summit, showing the meeting between Kim Jong Un and <b>Donald Trump</b>. Naturally, it wasn’t what the world had seen till then. While the 42-minute long KCTV documentary showed the entire ...",
"about": [
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/1a466af2-ed23-25bd-794d-1ca925e4681b",
"name": "Donald Trump"
},
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/f5ffb882-7230-f3fe-7141-cde5f4b5ed1a",
"name": "Singapore"
},
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/f28f12db-bc21-69f9-3860-1b24810b64ec",
"name": "Salute"
}
],
"provider": [
{
"_type": "Organization",
"name": "Scroll"
}
],
"datePublished": "2018-06-19T09:35:00.0000000Z",
"category": "World"
},
{
"name": "China accuses US of blackmailing after <b>Donald Trump</b>'s tariff threat",
"url": "http://www.newindianexpress.com/world/2018/jun/19/china-accuses-us-of-blackmailing-after-donald-trumps-tariff-threat-1830391.html",
"image": {
"thumbnail": {
"contentUrl": "https://www.bing.com/th?id=ON.6A02D23B98FB3695CB79863006E25D86&pid=News",
"width": 600,
"height": 300
}
},
"description": "BEIJING: China today accused the US of "blackmailing" by threatening to slap additional tariffs on USD 200 billion of Chinese goods and warned that it would hit back with comprehensive measures if Washington went ahead with the plan. China's response came ...",
"about": [
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/1a466af2-ed23-25bd-794d-1ca925e4681b",
"name": "Donald Trump"
},
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/5fcc3d97-0cf2-94e5-6dad-cd70e387bd69",
"name": "China"
}
],
"provider": [
{
"_type": "Organization",
"name": "The New Indian Express"
}
],
"datePublished": "2018-06-19T09:35:00.0000000Z",
"category": "Business"
},
{
"name": "Family unity must be preserved: UN Chief Antonio Guterres on <b>Donald Trump</b>'s zero-tolerance immigration policy",
"url": "http://www.newindianexpress.com/world/2018/jun/19/family-unity-must-be-preserved-un-chief-antonio-guterres-on-donald-trumps-zero-tolerance-immigrati-1830399.html",
"description": "UNITED NATIONS: Children must not be traumatised by being separated from their parents, UN chief Antonio Guterres has said amid a growing backlash over US President <b>Donald Trump</b>'s hardline immigration policy which has resulted in the separation of hundreds ...",
"about": [
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/1a466af2-ed23-25bd-794d-1ca925e4681b",
"name": "Donald Trump"
},
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/cba2f3bb-4714-89f7-8cd3-9cc8644da24b",
"name": "Zero tolerance"
}
],
"provider": [
{
"_type": "Organization",
"name": "The New Indian Express"
}
],
"datePublished": "2018-06-19T09:35:00.0000000Z"
},
{
"name": "<b>Donald Trump</b> has ordered the Pentagon to create the US Space Force",
"url": "https://www.technologyreview.com/the-download/611499/donald-trump-has-ordered-the-pentagon-to-create-the-us-space-force/",
"image": {
"thumbnail": {
"contentUrl": "https://www.bing.com/th?id=ON.D9DA1E8B8E5DA38E7C6F5D6F5D3FD23C&pid=News",
"width": 700,
"height": 393
}
},
"description": "The Space Force would constitute the sixth branch of the US armed forces. The news: During a meeting with the National Space Council today, President <b>Donald Trump</b> directed the Department of Defense and the Pentagon to begin work on the creation of the ...",
"about": [
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/1a466af2-ed23-25bd-794d-1ca925e4681b",
"name": "Donald Trump"
},
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/f8e3b5fa-8d72-5bd7-c9c1-24ef1caf555a",
"name": "The Pentagon"
}
],
"provider": [
{
"_type": "Organization",
"name": "MIT Technology Review"
}
],
"datePublished": "2018-06-19T09:32:00.0000000Z"
},
{
"name": "Melania Trump “Hates To See” Children Separated From Their Families At Borders",
"url": "http://miami.cbslocal.com/2018/06/17/melania-trump-hates-children-separated-families/",
"image": {
"thumbnail": {
"contentUrl": "https://www.bing.com/th?id=ON.E7697BA498AEE34B1399416F5C5B00DF&pid=News",
"width": 700,
"height": 466
}
},
"description": "President <b>Donald Trump</b> has repeatedly blamed the Democrats for the situation despite his administration instituting the policy change. “Democrats can fix their forced family breakup at the Border by working with Republicans on new legislation ...",
"about": [
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/6f7c7020-66da-2934-a3bb-190380654848",
"name": "Melania Trump"
}
],
"mentions": [
{
"name": "Melania Trump"
},
{
"name": "WFOR-TV"
},
{
"name": "Child"
}
],
"provider": [
{
"_type": "Organization",
"name": "CBS Miami"
}
],
"datePublished": "2018-06-19T09:32:00.0000000Z",
"category": "Politics"
},
{
"name": "Prince Harry said 'give <b>Donald Trump</b> a chance,' says Meghan Markle's father",
"url": "https://www.stuff.co.nz/life-style/104818877/Prince-Harry-said-give-Donald-Trump-a-chance-says-Meghan-Markles-father",
"image": {
"thumbnail": {
"contentUrl": "https://www.bing.com/th?id=ON.A5CE69ACF78448306EA41B1A47CCD62E&pid=News",
"width": 620,
"height": 349
}
},
"description": "Meghan Markle's father said that Prince Harry told him to give <b>Donald Trump</b> a chance and suggested that he was open about Britain's withdrawal from the European Union. In a lengthy interview with the British broadcaster ITV, Thomas Markle said Harry was an ...",
"about": [
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/1a466af2-ed23-25bd-794d-1ca925e4681b",
"name": "Donald Trump"
},
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/ae7736c2-4291-bc85-8732-6d20c29ff943",
"name": "Prince Harry"
},
{
"readLink": "https://api.cognitive.microsoft.com/api/v7/entities/e4308957-a185-03fa-10ed-3c7b47fd0aea",
"name": "Meghan Markle"
}
],
"provider": [
{
"_type": "Organization",
"name": "Stuff.co.nz"
}
],
"datePublished": "2018-06-19T09:31:00.0000000Z"
}
]
}
David here, from the Zapier Platform team.
It sounds like you figured out the Python portion above, but I wanted to explain a bit about what's going on. When returning items from a code step, there are a couple of things that may happen:
object
(python's dict
), all the keys will be flattened and arrays will be collated, giving the result in your screenshot abovearray
/list
, subsequent steps will run for each item in the returned list (the behavior you want)Originally, you were returning a dict with the top level assets key, which had undesired behavior. Now, you're returning an list of articles, which is what you wanted.
Let me know if you've got any other questions!