国会最近提出了官方的API,因此公众可以“从gongress.gov上可用的收藏中查看,检索和重复使用机器可读数据!”继续阅读以了解如何使用Congress API,Twilio Functions和Twilio Serverless Toolkit读取国会数据。
文本“票据”,“修订”或“摘要”到 +12029337044 接收有关随机账单或修订的数据!
先决条件
- 一个Twilio帐户-sign up for a free one here
- 带有短信功能的Twilio电话号码-configure one here
- A Congress.gov API Key â get one here
- Postman(您可以从命令行中提出卷曲请求)
- 安装node.js -download it here
提出国会。gov请求
您可以查看different Congress API endpoints offered here。为了获取某人的个人资料信息,URL看起来像[https://api.congress.gov/v3/bill/117/s/4693/summaries](https://api.congress.gov/v3/bill/117/s/4693/summaries)
,其中117是[国会numberhttps://en.wikipedia.org/wiki/117th_United_States_Congress,“ s”是账单的类型,“ 4693”是账单号。打开邮递员并将该URL粘贴到URL栏中。
在参数下添加您的API键:key
是api_key
,value
是您的国会API键。
单击Send
,用get请求击中它,以查看返回以下数据:
同样,您可以看到more Congress API endpoints here you can play around with!
开始使用Twilio无服务器工具包
无服务器工具包是CLI工具,可帮助您在本地开发并部署到Twilio Functions & Assets。使用无服务器工具包的最佳方法是通过Twilio CLI。如果您还没有安装Twilio CLI,请在命令行上运行以下命令以安装它和无服务器工具包:
npm install twilio-cli -g
twilio login
twilio plugins:install @twilio-labs/plugin-serverless
之后,创建您的新项目并安装我们的唯一需求[undici](https://github.com/nodejs/undici)
,以通过运行:
在node.js中提出HTTP请求
twilio serverless:init congress-api-sms –template=blank
cd congress-api-sms
npm install -s undici
功能和资产团队建议使用undici
与您的功能。
设置具有Twilio功能和资产的环境变量
在Root Directory中为您的函数项目打开您的.env
文件,并添加以下行:
CONGRESS_API_KEY=YOUR-CONGRESS-API-KEY
现在,如果您想在代码中使用context.CONGRESS_API_KEY
。
使用JavaScript发挥Twilio功能
在/functions
目录中制作一个新文件,称为 congress.js 包含以下代码:
exports.handler = async (context, event, callback) => {
const { request } = await import('undici');
const inbMsg = event.Body.toLowerCase().trim();
const twiml = new Twilio.twiml.MessagingResponse();
if(inbMsg.includes("bill")) {
const {
body
} = await request(`https://api.congress.gov/v3/bill?api_key=${context.CONGRESS_API_KEY}`);
const data = await body.json();
const billsLength = data.bills.length;
const randNum = Math.floor(Math.random() * (billsLength - 1)) + 1;
const bill = data.bills[randNum];
const { latestAction, title, type, number, originChamber } = bill;
const billMap = {
HR: "house bill",
S: "senate bill",
HJRES: "house joint resolution",
SJRES: "senate joint resolution",
HCONRES: "house concurrent resolution",
SCONRES: "senate concurrent resolution",
HRES: "house simple resolution",
SRES: "senate simple resolution"
};
twiml.message(`Bill: ${title}.\nType: ${billMap[type]}\nAssigned bill or resolution number: ${number}\nIt originated in the ${originChamber} but the latest action was ${latestAction.text} on ${latestAction.actionDate}`);
}
else if(inbMsg.includes("amendment")) {
const {
body
} = await request(`https://api.congress.gov/v3/amendment?api_key=${context.CONGRESS_API_KEY}`);
const data = await body.json();
const amendmentLength = data.amendments.length;
const randNum = Math.floor(Math.random() * (amendmentLength - 1)) + 1;
const amendment = data.amendments[randNum];
const { latestAction, purpose, congress, number } = amendment;
twiml.message(`Amendment purpose: ${purpose}\nAssigned amendment or resolution number:${number}\n Latest action was on ${latestAction.actionDate} to ${latestAction.text}.\n Congress: ${congress}.`);
}
else if(inbMsg.includes("summaries")) {
const CURRENT_CONGRESS = 117;
const {
body
} = await request(`https://api.congress.gov/v3/summaries/${CURRENT_CONGRESS}?api_key=${context.CONGRESS_API_KEY}`);
const data = await body.json();
const sumLength = data.summaries.length;
const randNum = Math.floor(Math.random() * (sumLength - 1)) + 1;
const summaries = data.summaries[randNum];
const { bill, currentChamber, text, actionDate, actionDesc } = summaries;
const regexToStripHtmlTags = /<(.|\n)*?>/g;
const textWithoutHtmlTags = text.replace(regexToStripHtmlTags, '');
const msg = `Summary title: ${bill.title}.\nStarted in: ${bill.originChamber} on ${actionDate}, currently in the ${currentChamber} chamber in Congress ${bill.congress} and it was ${actionDesc}\n${textWithoutHtmlTags}`;
twiml.message(msg);
}
else {
twiml.message(`Send "bill", "amendment", or "summaries"`);
}
callback(null, twiml);
};
此代码导入undici
,制作了一个Twilio Messaging Response object,从入站文本消息用户中创建一个可变的inbMsg
,并检查该消息输入是否包含bill
,amendment
或summaries
(国会API的三个端点)。然后,该代码基于从国会API返回的随机账单或修正案的总数生成一个随机数,将其从该给定端点(如上所述所看到的邮递员所看到的)解析为变量,例如修正案的类型或比尔,最近的日期采取了一些行动,还有更多!
如果某人不发送包含“账单”,“摘要”或“修正案”(他们可以学习的三个主题)的消息,我们会返回一条消息。否则,我们解析了国会对象返回的信息,例如对法案采取的最新诉讼,账单类型,给定随机修正案的目的,法案的原始商会等。我们返回包含该数据的短信!
您可以查看complete app on GitHub here。
用Twilio电话号码配置功能
用面向公共的URL将我们的应用程序打开到网络,请从congress-api-sms
root Directory运行twilio serverless:deploy
。您应该在终端的底部看到它:
获取与您的应用相对应的功能URL(以/congress
结尾)并配置带有它的Twilio电话号码,如下所示:选择您在Twilio电话号码控制台中刚购买的Twilio号码部分。粘贴文本字段中的链接,以 webhook的形式粘贴链接,以确保将其设置为 http post 。当您单击保存时,应该看起来像这样!
该服务是无服务器的项目名称,环境没有其他选项,功能路径是文件名。现在,将您的电话和文字“账单”或“修正案”或“摘要”发送给您的Twilio号码。
Twilio Serverless和国会API的下一步是什么?
Twilio的无服务器工具包使您可以快速部署Web应用程序,并为您无缝处理服务器的功能和资产。您可以使用这些数据做很多事情,并且可以看到国会正在采取的措施 - 它的有趣数据值得播放!让我在线知道您正在使用Twilio功能和资产来建立什么,不要忘记今年11月投票!