在床单的引擎盖下

发表在<!---->2月16日

在这篇文章中,我们将深入了解Sheet Tweetr的基本原理。本文比介绍文章“API Sample App: Sheet Tweetr”更深入。的Sheet Tweetr的源代码可以在GitHub上找到。

Sheet Tweetr是一个简单的应用程序,可以从Smartsheet发送推文,并作为一个示例应用程序使用Smartsheet JavaScript SDK.Sheet Tweetr读取一个表,检查每一行以查看推文计划何时发出,并在合适的时间发布推文。根据用户设置的频率,推文可以发出多次。

Smartsheet和Sheet Tweetr

Sheet Tweetr使用Smartsheet的API来检索推文列表,并在推文发布后对其行进行更新。Smartsheet在Sheet tweet中扮演着另一个重要角色——作为输入和存储tweet的接口。

要设置Sheet Tweetr,用户需要一个Smartsheet访问令牌Smartsheet JavaScript SDK.如果您是Smartsheet API的新手,那么本文开始使用Smartsheet API是一个很好的开始。当你有问题的时候Smartsheet API常见问题解答是一个很好的资源。

Tweetr→getListOfItems()

进入Sheet Tweetr代码的入口点是getListOfItems函数,该函数调用getSheet()方法Smartsheet的JavaScript SDK。在收到表的数据响应后,进行以下步骤:

  • 循环遍历工作表中的每一行。

  • 在每次迭代期间,每行各自的数据都用于创建scheduledItem对象。

  • 检查每个scheduledItem的详细信息,以确定它是否有效(意味着准备发布)。

  • 如果有效,scheduledItem将被推入名为itemsWithValidDates的数组。

  • 在检查了每一行之后,itemsWithValidDates被传递给postTweet()。

    函数getListOfItemssmartsheetClientgetSheet选项错误数据= >如果错误控制台日志错误返回错误0<数据长度++数据simpleRowcreateSimpleRowscheduledItemtweetTextsimpleRowCOLUMN_MAPtweetTextCIDtweetImagesimpleRowCOLUMN_MAPtweetImageCIDtweetStartDate日期解析simpleRowCOLUMN_MAPtweetStartCIDtweetEndDate日期解析simpleRowCOLUMN_MAPtweetEndCIDlastRansimpleRowCOLUMN_MAPtweetLastRanCID频率simpleRowCOLUMN_MAPtweetFreqCIDfreqTypesimpleRowCOLUMN_MAPtweetFreqTypeCIDtweetTimesimpleRowCOLUMN_MAPtweetTimeCIDrowIdid结果validateItemscheduledItem如果结果= = =真正的itemsWithValidDatesscheduledItem继续postTweetitemsWithValidDates

    在上面的代码中,您将看到createSimpleRow函数。它从一行中的每个单元格获取列id和值,从而在手动将每行组装到scheduledItem时更容易引用这些值。scheduledItem被传递给validateItem(),该函数负责检查每条tweet以确定其是否有效,并应将其发送到Twitter。然后,在Sheet Tweetr循环遍历每一行之后,将有效的tweet推入到postTweet()数组中。

确定要发布哪些推文→validateItem() & examineCriteria()

validateItem函数被调用时,scheduledItem的属性被传递给examineCriteria.如果返回的标志与firstPost、specificPostTime或validPost匹配,则validateItem返回true-tellinggetListOfItems功能,各自的推文是有效的。

函数validateItemscheduledItemscheduledItemtweetTime= = =未定义的?scheduledItemtweetTime“上午12:00scheduledItemtweetTime常量isValidItemexamineCriteriascheduledItemtweetStartDatescheduledItemtweetEndDatescheduledItemtweetTimescheduledItemlastRanscheduledItem频率scheduledItemfreqType日期现在如果isValidItemfirstPost||isValidItemvalidPost返回真正的

也许一开始并不明显examineCriteria是在做,但实际上它的本质很简单。下面的代码包含了确定一条tweet是否可以发布的逻辑。

函数examineCriteriatweetStartDatetweetEndDatetweetTimelastRan频率freqTypecomparedTo//用例1:日期不在给定范围内如果tweetStartDate> =comparedTo||tweetEndDate< =comparedTo控制台日志“无效的日期范围”返回invalidDate真正的//用例2:预定的项目有有效日期,但还没有发布如果lastRan= = =未定义的postTimespecificTimetweetTimetweetStartDate取得时间常量oneHour3.6 e6常量oneHourBeforecomparedTo-oneHour常量oneHourAftercomparedTo+oneHour如果postTime< =oneHourAfter& &postTime> =oneHourBefore控制台日志“足够接近……”返回firstPost真正的//用例3:推文有有效日期,应该再次发布nextTweetDatefrequencyChecklastRan频率freqType如果nextTweetDate取得时间<comparedTo返回validPost真正的返回

让我们更深入地了解每个用例。
用例1。)推文的compardto日期位于工作表的开始日期和结束日期之外。

如果tweetStartDate> =comparedTo||tweetEndDate< =comparedTo

第一个条件:开始日期大于compare to意味着现在发布推文还为时过早。当前日期还没有到推文的开始日期。
第二个条件:结束日期小于compare to意味着已经来不及发布推文了。当前日期已经超过了推文的结束日期。

用例2。)这条推特还没有发布。

如果lastRan= = =未定义的

这个条件抓取所有第一次发布的推文。

用例3。)这条推文已经发布了,如果时间足够长,应该会再发布一次。

nextTweetDatefrequencyChecklastRan频率freqType

frequencyCheck()函数接受lastRan,即twitter最后发布的时间,并添加frequency -返回twitter可以发布的未来时间。

如果nextTweetDate取得时间<comparedTo

如果nextTweetDate小于compardto,那么已经有足够的时间让推文再次发出,并且推文是有效的。

发送推文到Twitter→postTweet() & tweet()

postTweetfunction接受一个名为validItems的tweet数组。如果数组为空,则没有有效的tweet, Sheet Tweetr可以终止。如果数组有条目,则转变返回第一个条目,并在调用之前将其从数组中移除tweetTheRow

函数postTweetvalidItems如果validItems长度控制台日志“没有有效的推文可用”返回cb如果validItems长度>0nextItemvalidItems转变tweetTheRownextItem

Sheet Tweetr使用了一个良好的文档名为“Twit”的节点模块它集成了Twitter和Node.js。第一步是创建一个Twit实例,它是Twit方法的入口点,通过提供用于格式化发送到Twitter API的请求的属性。

常量推特笨蛋consumer_keyctx秘密TWITTER_CONSUMER_KEYconsumer_secretctx秘密TWITTER_CONSUMER_SECRETaccess_tokenctx秘密TWITTER_ACCESS_TOKENaccess_token_secretctx秘密TWITTER_ACCESS_SECRETtimeout_ms601000//可选的HTTP请求超时。

Twit的使用非常简单。大多数方法接受描述要发送到Twitter的数据的参数,以及在获得结果(成功或失败)时调用的回调。每次使用Twit的方法时,我们都需要提供一个回调,该回调使用API调用的结果进行调用。

每条tweet都使用这个函数发送:

函数推特状态rowId推特帖子“状态/更新”状态犯错数据响应= >如果犯错控制台日志的错误$ {犯错postTweetitemsWithValidDates返回犯错控制台日志“成功推”updateSheetRowrowId返回cb

推特function接受两个参数:status、tweet的文本和/或图像以及rowId。如果一条推文成功发布,那么Sheet Tweetr将更新该推文在工作表中的行updateSheetRow应用程序终止。但是,如果抛出错误,则postTweet函数再次被调用。

更新Smartsheet中的Tweet行→updateSheetRow()

updateSheetRow方法允许Sheet Tweetr根据需要更新特定的行。在与sheet Tweetr连接的工作表中,名为LastRan的列用于保存发布tweet的特定时间的时间戳。这个时间戳很重要,可以作为检查频率的参考点。每发一条推特,LastRan都必须更新。

函数updateSheetRowrowId常量rowUpdateidrowId细胞columnIdCOLUMN_MAP“tweetLastRanCID”价值日期现在常量选项身体rowUpdatesheetIdctx秘密SMARTSHEET_SHEET_IDsmartsheetClientupdateRow选项错误数据= >如果错误控制台日志错误返回错误控制台日志成功更新的

从Smartsheet传递图像到Twitter

包含图像的tweet需要与只包含文本的tweet进行不同的处理。

函数tweetWithImg文本image64rowId推特帖子“媒体/上传”media_dataimage64犯错媒体响应= >如果犯错控制台日志的错误$ {犯错返回犯错常量状态状态文本media_ids媒体media_id_string推特状态rowId

两者的主要区别tweetWithImg而且推特是一个不同的端点(将媒体上传到Twitter)、状态对象中的一个额外属性(media_ids)和一个名为image64的新参数。image64参数需要是一个base64编码的图像。

让我们来看看getImgData函数。图像从Smartsheet返回后立即被base64编码。此base64字符串可用于将图像上传到Twitter。

注意:下面的Smartsheet API调用看起来与其他调用略有不同。这是因为在撰写本文时,Smartsheet JavaScript SDK中还没有下载图像的方法。

函数getImgDataimageIdimageReturn常量选项方法“职位”url“https://api.smartsheet.com/2.0/imageurls”授权“持票人”+ctx秘密SMARTSHEET_ACCESS_TOKEN身体imageIdimageIdjson真正的请求选项错误响应身体= >如果错误控制台日志错误返回错误其他的常量tempImgUrl身体imageUrls0url常量临时字符串真正的base64编码tempImgUrl临时犯错image64= >如果犯错控制台日志犯错返回犯错返回imageReturnimage64

将图像从Smartsheet传递到Twitter具有挑战性,因为Smartsheet生成的图像url是临时的。目前的解决方案是将Twitter与Smartsheet结合在一起。未来改进的一个想法是,在解析完tweet的行后,检索图像并保存base64编码的字符串。

自动Sheet Tweetr

Sheet Tweetr的另一个挑战是自动化。Smartsheet DevRel需要Sheet Tweetr需要在循环的基础上自动运行。应用程序需要启动,从Smartsheet中提取数据,查看推文列表,发布它找到的第一条“有效”推文,然后停止运行。我们使用无服务器架构实现了这一点。你可以把“无服务器”想象成“功能即服务”。在下一篇文章中,我们将讨论如何自动使用Sheet TweetrWebtask,这是一款来自Auth0的出色的无服务器工具。

Sheet Tweetr概述

理解Sheet Tweetr背后发生的事情的关键是跟踪信息流。的getListOfItems函数应用获取推文列表所需的逻辑,确定哪些推文是“有效的”,并将它们传递给postTweet.控制Sheet Tweetr如何与Twitter交互的逻辑分布在多个函数中,但是postTweet允许Sheet Tweetr持续存在,直到成功发布一条推文或没有更多有效的推文存在。

现在我们已经了解了Sheet Tweetr的底层,您已经看到了使用Smartsheet API检索的图像和使用Smartsheet的JavaScript SDK读取/写入到表中的数据。希望看到在应用程序上下文中使用的API和SDK能使它们更容易理解。看一看在GitHub上的Sheet Tweetr欢迎在推特上联系我,@SmartsheetDev,或使用smartsheet-api标签

评论

评论