如何将JSON结果拆分为多个Zapier资产?

时间:2018-06-19 09:22:50

标签: javascript python json zapier

我的目标是致电Bing News Search via API以获得与特定查询匹配的结果。

我正在使用Zapier。我正在使用Code step,它可以使用Python的Python。 我目前有Python代码来调用API,如下所示......

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()}]

这很好用。它成功调用并获得结果。

问题是,当我想在后续的Zapier步骤中使用这些结果的内容时,它们都被混合在同一个响应对象中 - 也就是说,来自多个返回的内部故事对象的每个等效值全部放在相同的可用Zapier值,用逗号分隔。

示例:对于在对象中返回的10个故事,可用的“category”值为“null,null,null,World,null,Politics,Politics,Politics,null,null” - 但它应该只是其中一个,一个故事。

enter image description here

换句话说,我如何个性化资产/对象以让Zapier单独处理

我会说这不只是解析值,而是以Zapier可以理解的方式这样做。但是,我以前用其他语言做过一次......

通过这个相同原理的例子,我有一个单独的zap用于另一个目的,它做了类似的事情。它接收传入的Gmail电子邮件并检查正文(inputData.body)以查找与特定模式匹配的字符串。可能有多个这样的字符串。对于其中的每一个,以下Javascript将每个多个分别传递给下一个Zapier步骤。

// 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} })

这神奇地允许我后续的zap步骤仅针对单个字符串而不是多个字符串进行操作。 如何在上述API代码中实现类似效果?

每个代码示例的最后几行似乎都持有密钥...在Javascript中,映射某些东西......?

以下是每个请求的示例回复...

{
    "_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&#39;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&#39;s policy of &quot;child-snatching&quot; 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. &quot;Families belong together,&quot; 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&#39;t Let U.S. Became a &#39;Migrant Camp&#39;",
            "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>&#39;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 &quot;blackmailing&quot; 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&#39;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>&#39;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>&#39;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 &#39;give <b>Donald Trump</b> a chance,&#39; says Meghan Markle&#39;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&#39;s father said that Prince Harry told him to give <b>Donald Trump</b> a chance and suggested that he was open about Britain&#39;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"
        }
    ]
}

2 个答案:

答案 0 :(得分:1)

Zapier Platform团队的David在这里。

听起来您已经了解了上面的Python部分,但是我想解释一下发生了什么。从代码步骤返回项目时,可能会发生几件事:

  • 如果返回的结构是object(python的dict),则所有键将被展平,数组将被整理,结果如上所示。
  • 如果返回的结构是array / list,则将对返回列表中的每个项目(您想要的行为)运行后续步骤

最初,您返回的是具有顶级资产键的 dict ,该键具有不良行为。现在,您要返回的是文章的列表

让我知道您是否还有其他问题!

答案 1 :(得分:1)

不确定是否可以使用此功能,但是Zapier Formatter> Text> Split Text现在具有“ Segment Index”选项,该选项将返回“ All(作为单独的字段)”。您将获得多个输出,可以在后续步骤中进行选择。