with Yoast SEO and Adobe Document Generation API?
The Yoast SEO API enables automation of SEO tasks and retrieval of data to optimize website content for search engines directly through Pipedream. Connect the Yoast SEO API to analyze pages, manage metadata, and improve search rankings. Pipedream's serverless platform makes it easy to build complex workflows linking Yoast SEO with other services, triggering actions based on content changes, SEO scores, or other criteria.
import { axios } from "@pipedream/platform"
export default defineComponent({
props: {
yoast_seo: {
type: "app",
app: "yoast_seo",
}
},
async run({steps, $}) {
return await axios($, {
url: `https://${this.yoast_seo.$auth.url}/wp-json/yoast/v1/get_head`,
auth: {
username: `${this.yoast_seo.$auth.username}`,
password: `${this.yoast_seo.$auth.application_password}`,
},
params: {
url: `{replace_with_your_url}`,
},
})
},
})
import fs from "fs";
import axios from "axios";
import {
ServicePrincipalCredentials,
PDFServices,
MimeType,
DocumentMergeParams,
OutputFormat,
DocumentMergeJob,
DocumentMergeResult
} from "@adobe/pdfservices-node-sdk";
export default defineComponent({
props: {
adobe_document_generation_api: {
type: "app",
app: "adobe_document_generation_api",
}
},
async run({steps, $}) {
// Configuration constants
const PDF_SERVICES_CLIENT_ID = this.adobe_document_generation_api.$auth.client_id;
const PDF_SERVICES_CLIENT_SECRET = this.adobe_document_generation_api.$auth.client_secret;
try {
// Initial setup, create credentials instance
const credentials = new ServicePrincipalCredentials({
clientId: PDF_SERVICES_CLIENT_ID,
clientSecret: PDF_SERVICES_CLIENT_SECRET
});
// Creates a PDF Services instance
const pdfServices = new PDFServices({ credentials });
// Creates an asset(s) from source file(s) and upload
const response = await axios.get("https://developer.adobe.com/document-services/docs/receiptTemplate.docx", { responseType: 'stream' });
const readStream = response.data;
const inputAsset = await pdfServices.upload({
readStream,
mimeType: MimeType.DOCX
});
// Setup input data for the document merge process
const jsonDataForMerge = {
"author": "Gary Lee",
"Company": {
"Name": "Projected",
"Address": "19718 Mandrake Way",
"PhoneNumber": "+1-100000098"
},
"Invoice": {
"Date": "January 15, 2021",
"Number": 123,
"Items": [
{
"item": "Gloves",
"description": "Microwave gloves",
"UnitPrice": 5,
"Quantity": 2,
"Total": 10
},
{
"item": "Bowls",
"description": "Microwave bowls",
"UnitPrice": 10,
"Quantity": 2,
"Total": 20
}
]
},
"Customer": {
"Name": "Collins Candy",
"Address": "315 Dunning Way",
"PhoneNumber": "+1-200000046",
"Email": "cc@abcdef.co.dw"
},
"Tax": 5,
"Shipping": 5,
"clause": {
"overseas": "The shipment might take 5-10 more than informed."
},
"paymentMethod": "Cash"
};
// Create parameters for the job
const params = new DocumentMergeParams({
jsonDataForMerge,
outputFormat: OutputFormat.PDF
});
// Creates a new job instance
const job = new DocumentMergeJob({ inputAsset, params });
// Submit the job and get the job result
const pollingURL = await pdfServices.submit({ job });
const pdfServicesResponse = await pdfServices.getJobResult({
pollingURL,
resultType: DocumentMergeResult
});
// Get content from the resulting asset(s)
const resultAsset = pdfServicesResponse.result.asset;
const streamAsset = await pdfServices.getContent({ asset: resultAsset });
// Creates a write stream and copy stream asset's content to it
const outputFilePath = "/tmp/generatePDFOutput.pdf";
console.log(`Saving asset at ${outputFilePath}`);
return new Promise((resolve, reject) => {
const writeStream = fs.createWriteStream(outputFilePath);
streamAsset.readStream.pipe(writeStream);
writeStream.on('finish', () => resolve(outputFilePath));
writeStream.on('error', reject);
});
} catch(err) {
console.error('Error generating PDF:', err);
throw err;
}
},
})