auths
objectreturn
or this.key = 'value'
, pass input data to your code viaparams
, and maintain state across executions with$checkpoint.async
(event, steps) => {
}
const fs = require('fs');
getRandomInt = function(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min) + min); //The maximum is exclusive and the minimum is inclusive
}
//first get the quote
/*
let quoteResp = await fetch('https://api.taylor.rest');
let quoteData = await quoteResp.json();
this.quote = quoteData.quote;
*/
const quotes = JSON.parse(fs.readFileSync($attachments['quotes.json']));
this.quote = quotes[getRandomInt(0, quotes.length)];
/*
let imageResp = await fetch('https://api.taylor.rest/image');
let imageData = await imageResp.json();
*/
const images = JSON.parse(fs.readFileSync($attachments['images.json']));
this.image = images[getRandomInt(0, images.length)];
console.log(this.quote, this.image);
URL of media to upload to Twitter
The MIME type of the media being uploaded. See https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload-init
async
(params, auths) => {
}
const axios = require("axios")
const chunk = require("lodash.chunk")
// Data we need to make the Twitter API request
const oauthSignerUri = auths.twitter.oauth_signer_uri
const token = {
key: auths.twitter.oauth_access_token,
secret: auths.twitter.oauth_refresh_token,
}
const signConfig = {
token,
oauthSignerUri
}
// Download image, base64 encode it, then upload the media to Twitter
const imageResponse = await axios({
url: params.url,
method: "GET",
responseType: "arraybuffer"
})
const file = Buffer.from(imageResponse.data, 'binary')
const total_bytes = file.length
const base64EncodedFile = file.toString('base64')
const { media_type } = params
// First, tell Twitter the type of file you're uploading, how big it is, etc.
// https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload-init
const mediaUploadInitRequest = {
method: 'POST',
data: '',
url: "https://upload.twitter.com/1.1/media/upload.json",
params: {
command: "INIT",
total_bytes,
media_type,
}
}
// Twitter returns a media_id_string that we use to upload the file,
// and to reference it in future steps
this.uploadMediaInitResponse = (await require("@pipedreamhq/platform").axios(this, mediaUploadInitRequest, signConfig))
this.mediaIdString = this.uploadMediaInitResponse.media_id_string
// Split the file into chunks, APPEND each chunk
const splitStringRe = new RegExp('.{1,' + 10000 + '}', 'g');
const chunks = base64EncodedFile.match(splitStringRe);
// Collect all of our requests into an array
const requests = []
for (const [segment_index, media_data] of chunks.entries()) {
// APPEND file content in chunks
// See https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload-append
const mediaUploadAppendRequest = {
method: 'POST',
data: '',
url: "https://upload.twitter.com/1.1/media/upload.json",
params: {
command: "APPEND",
media_id: this.mediaIdString,
segment_index,
media_data,
}
}
requests.push(require("@pipedreamhq/platform").axios(this, mediaUploadAppendRequest, signConfig))
}
// Send N requests at a time
const requestChunks = chunk(requests, 10)
for (const [i, chunk] of requestChunks.entries()) {
console.log(`Processing chunk ${i}`)
await Promise.all(chunk)
}
// Finally, tell Twitter we're done uploading
// https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload-finalize
const mediaUploadFinalizeRequest = {
method: 'POST',
data: '',
url: "https://upload.twitter.com/1.1/media/upload.json",
params: {
command: "FINALIZE",
media_id: this.mediaIdString,
}
}
await require("@pipedreamhq/platform").axios(this, mediaUploadFinalizeRequest, signConfig)
async
(params, auths) => {
}
const axios = require('axios')
const {status, in_reply_to_status_id, auto_populate_reply_metadata, exclude_reply_user_ids, attachment_url, media_ids, possibly_sensitive, lat, long, place_id, display_coordinates, trim_user, enable_dmcommands, fail_dmcommands, card_uri} = params
const body = {
config: {
url: `https://api.twitter.com/1.1/statuses/update.json`,
method: 'POST',
params,
},
token: {
key: auths.twitter.oauth_access_token,
secret: auths.twitter.oauth_refresh_token,
},
}
const proxy = "https://api.pipedream.com/v1/oauth1/app_13GhY1"
const resp = await axios.post(proxy,body)
const {messages, data} = resp.data
for (const message of messages) {
console.log(message)
}
return data