mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-24 04:04:06 -08:00
⚡ Remove link.fish integration
This commit is contained in:
parent
4573d503dc
commit
7950c38f5a
|
@ -2,6 +2,21 @@
|
|||
|
||||
This list shows all the versions which include breaking changes and how to upgrade.
|
||||
|
||||
## 0.x.x
|
||||
|
||||
### What changed?
|
||||
|
||||
The link.fish node got removed because the service is shutting down.
|
||||
|
||||
### When is action necessary?
|
||||
|
||||
If you are are activly using the link.fish node.
|
||||
|
||||
### How to upgrade:
|
||||
|
||||
Sadly not possible. Look for an alternative service.
|
||||
|
||||
|
||||
## 0.83.0
|
||||
|
||||
### What changed?
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
import {
|
||||
ICredentialType,
|
||||
NodePropertyTypes,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
|
||||
export class LinkFishApi implements ICredentialType {
|
||||
name = 'linkFishApi';
|
||||
displayName = 'link.fish API';
|
||||
documentationUrl = 'linkFish';
|
||||
properties = [
|
||||
{
|
||||
displayName: 'Email',
|
||||
name: 'email',
|
||||
type: 'string' as NodePropertyTypes,
|
||||
default: '',
|
||||
|
||||
},
|
||||
{
|
||||
displayName: 'Api Key',
|
||||
name: 'apiKey',
|
||||
type: 'string' as NodePropertyTypes,
|
||||
default: '',
|
||||
},
|
||||
];
|
||||
}
|
|
@ -1,350 +0,0 @@
|
|||
import { IExecuteSingleFunctions } from 'n8n-core';
|
||||
import {
|
||||
IDataObject,
|
||||
INodeExecutionData,
|
||||
INodeType,
|
||||
INodeTypeDescription,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
export class LinkFish implements INodeType {
|
||||
description: INodeTypeDescription = {
|
||||
displayName: 'link.fish Scrape',
|
||||
name: 'linkFish',
|
||||
icon: 'file:linkfish.png',
|
||||
group: ['input'],
|
||||
version: 1,
|
||||
description: 'Scrape data from an URL',
|
||||
defaults: {
|
||||
name: 'link.fish Scrape',
|
||||
color: '#33AA22',
|
||||
},
|
||||
inputs: ['main'],
|
||||
outputs: ['main'],
|
||||
credentials: [
|
||||
{
|
||||
name: 'linkFishApi',
|
||||
required: true,
|
||||
}
|
||||
],
|
||||
properties: [
|
||||
{
|
||||
displayName: 'Operation',
|
||||
name: 'operation',
|
||||
type: 'options',
|
||||
options: [
|
||||
{
|
||||
name: 'All Data',
|
||||
value: 'data',
|
||||
description: 'Get all found data',
|
||||
},
|
||||
{
|
||||
name: 'Apps',
|
||||
value: 'apps',
|
||||
description: 'Get mobile app information',
|
||||
},
|
||||
{
|
||||
name: 'Social Media',
|
||||
value: 'socialMedia',
|
||||
description: 'Get social-media profiles',
|
||||
},
|
||||
{
|
||||
name: 'Screenshot',
|
||||
value: 'screenshot',
|
||||
description: 'Get screenshot',
|
||||
},
|
||||
],
|
||||
default: 'data',
|
||||
description: 'The operation to perform.',
|
||||
},
|
||||
|
||||
// ----------------------------------
|
||||
// All
|
||||
// ----------------------------------
|
||||
{
|
||||
displayName: 'URL',
|
||||
name: 'url',
|
||||
type: 'string',
|
||||
default: '',
|
||||
required: true,
|
||||
description: 'URL of which the data should be extracted.',
|
||||
|
||||
},
|
||||
|
||||
// ----------------------------------
|
||||
// data
|
||||
// ----------------------------------
|
||||
{
|
||||
displayName: 'Item Format',
|
||||
name: 'itemFormat',
|
||||
type: 'options',
|
||||
options: [
|
||||
{
|
||||
name: 'Normal',
|
||||
value: 'normal'
|
||||
},
|
||||
{
|
||||
name: 'Flat',
|
||||
value: 'flat'
|
||||
},
|
||||
],
|
||||
default: 'flat',
|
||||
displayOptions: {
|
||||
show: {
|
||||
operation: [
|
||||
'data'
|
||||
],
|
||||
},
|
||||
},
|
||||
description: 'If data should be returned in the "normal"<br />format or in the "flat" one which has all<br />items on one level.',
|
||||
},
|
||||
{
|
||||
displayName: 'Simplify Types',
|
||||
name: 'simplifySpecialTypes',
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
displayOptions: {
|
||||
show: {
|
||||
operation: [
|
||||
'data'
|
||||
],
|
||||
},
|
||||
},
|
||||
description: 'If special types like "ParameterValue"<br />should be simplified to a key -> value pair.',
|
||||
},
|
||||
|
||||
// ----------------------------------
|
||||
// screenshot
|
||||
// ----------------------------------
|
||||
{
|
||||
displayName: 'Type',
|
||||
name: 'type',
|
||||
type: 'options',
|
||||
options: [
|
||||
{
|
||||
name: 'Normal',
|
||||
value: 'normal',
|
||||
description: 'Creates a screenshot in 16:9 format.',
|
||||
},
|
||||
{
|
||||
name: 'Full',
|
||||
value: 'full',
|
||||
description: 'Creates a full page screenshot.',
|
||||
},
|
||||
],
|
||||
default: 'normal',
|
||||
displayOptions: {
|
||||
show: {
|
||||
operation: [
|
||||
'screenshot'
|
||||
],
|
||||
},
|
||||
},
|
||||
description: 'The file format the screenshot should be returned as.',
|
||||
},
|
||||
{
|
||||
displayName: 'File Format',
|
||||
name: 'fileFormat',
|
||||
type: 'options',
|
||||
options: [
|
||||
{
|
||||
name: 'JPG',
|
||||
value: 'jpg',
|
||||
},
|
||||
{
|
||||
name: 'PNG',
|
||||
value: 'png',
|
||||
},
|
||||
],
|
||||
default: 'jpg',
|
||||
displayOptions: {
|
||||
show: {
|
||||
operation: [
|
||||
'screenshot'
|
||||
],
|
||||
},
|
||||
},
|
||||
description: 'The file format the screenshot should be returned as.',
|
||||
},
|
||||
{
|
||||
displayName: 'Width',
|
||||
name: 'width',
|
||||
type: 'number',
|
||||
typeOptions: {
|
||||
minValue: 50,
|
||||
maxValue: 1280,
|
||||
},
|
||||
default: 640,
|
||||
displayOptions: {
|
||||
show: {
|
||||
operation: [
|
||||
'screenshot'
|
||||
],
|
||||
},
|
||||
},
|
||||
description: 'The width of the screenshot in pixel.',
|
||||
},
|
||||
{
|
||||
displayName: 'Binary Property',
|
||||
name: 'binaryPropertyName',
|
||||
type: 'string',
|
||||
default: 'data',
|
||||
required: true,
|
||||
displayOptions: {
|
||||
show: {
|
||||
operation: [
|
||||
'screenshot',
|
||||
],
|
||||
},
|
||||
|
||||
},
|
||||
placeholder: '',
|
||||
description: 'Name of the binary property in which to save<br />the binary data of the screenshot.',
|
||||
},
|
||||
|
||||
// ----------------------------------
|
||||
// Multiple ones
|
||||
// ----------------------------------
|
||||
{
|
||||
displayName: 'Browser Render',
|
||||
name: 'browserRender',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
displayOptions: {
|
||||
hide: {
|
||||
operation: [
|
||||
'screenshot'
|
||||
],
|
||||
},
|
||||
},
|
||||
description: 'Renders the website in a browser<br />(charges 5 instead of 1 credit!)',
|
||||
},
|
||||
{
|
||||
displayName: 'Return URLs',
|
||||
name: 'returnUrls',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
displayOptions: {
|
||||
hide: {
|
||||
operation: [
|
||||
'data',
|
||||
'screenshot',
|
||||
],
|
||||
},
|
||||
},
|
||||
description: 'Returns app URLs instead of the identifiers.',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
|
||||
async executeSingle(this: IExecuteSingleFunctions): Promise<INodeExecutionData> {
|
||||
const url = this.getNodeParameter('url') as string;
|
||||
|
||||
const credentials = this.getCredentials('linkFishApi');
|
||||
|
||||
if (credentials === undefined) {
|
||||
throw new Error('No credentials got returned!');
|
||||
}
|
||||
|
||||
let requestMethod = 'GET';
|
||||
|
||||
// For Post
|
||||
const body: IDataObject = {
|
||||
url,
|
||||
};
|
||||
// For Query string
|
||||
const qs: IDataObject = {};
|
||||
|
||||
let endpoint: string;
|
||||
let encoding: string | null = 'utf8';
|
||||
|
||||
const operation = this.getNodeParameter('operation') as string;
|
||||
|
||||
if (operation === 'data') {
|
||||
requestMethod = 'POST';
|
||||
|
||||
body.browser_render = this.getNodeParameter('browserRender') as boolean;
|
||||
body.item_format = this.getNodeParameter('itemFormat') as string;
|
||||
body.simplify_special_types = this.getNodeParameter('simplifySpecialTypes') as boolean;
|
||||
|
||||
endpoint = 'data';
|
||||
} else if (operation === 'apps') {
|
||||
requestMethod = 'GET';
|
||||
|
||||
qs.browser_render = this.getNodeParameter('browserRender') as boolean;
|
||||
qs.return_urls = this.getNodeParameter('returnUrls') as boolean;
|
||||
|
||||
endpoint = 'apps';
|
||||
} else if (operation === 'socialMedia') {
|
||||
requestMethod = 'GET';
|
||||
|
||||
qs.browser_render = this.getNodeParameter('browserRender') as boolean;
|
||||
qs.return_urls = this.getNodeParameter('returnUrls') as boolean;
|
||||
|
||||
endpoint = 'social-media';
|
||||
} else if (operation === 'screenshot') {
|
||||
requestMethod = 'GET';
|
||||
encoding = null;
|
||||
|
||||
qs.file_format = this.getNodeParameter('fileFormat') as string;
|
||||
qs.type = this.getNodeParameter('type') as string;
|
||||
qs.width = this.getNodeParameter('width') as number;
|
||||
|
||||
endpoint = 'browser-screenshot';
|
||||
} else {
|
||||
throw new Error(`The operation "${operation}" is not supported!`);
|
||||
}
|
||||
|
||||
const options = {
|
||||
method: requestMethod,
|
||||
body,
|
||||
headers: {
|
||||
'x-lf-source': 'n8n',
|
||||
},
|
||||
qs,
|
||||
uri: `https://api.link.fish/Urls/${endpoint}`,
|
||||
auth: {
|
||||
user: credentials.email as string,
|
||||
pass: credentials.apiKey as string,
|
||||
},
|
||||
encoding,
|
||||
json: true
|
||||
};
|
||||
|
||||
const responseData = await this.helpers.request(options);
|
||||
|
||||
if (operation === 'screenshot') {
|
||||
const item = this.getInputData();
|
||||
|
||||
const newItem: INodeExecutionData = {
|
||||
json: item.json,
|
||||
binary: {},
|
||||
};
|
||||
|
||||
if (item.binary !== undefined) {
|
||||
// Create a shallow copy of the binary data so that the old
|
||||
// data references which do not get changed still stay behind
|
||||
// but the incoming data does not get changed.
|
||||
Object.assign(newItem.binary, item.binary);
|
||||
}
|
||||
|
||||
// Add the returned data to the item as binary property
|
||||
const binaryPropertyName = this.getNodeParameter('binaryPropertyName') as string;
|
||||
|
||||
let fileExtension = 'png';
|
||||
let mimeType = 'image/png';
|
||||
if (qs.file_format === 'jpg') {
|
||||
fileExtension = 'jpg';
|
||||
mimeType = 'image/jpeg';
|
||||
}
|
||||
|
||||
newItem.binary![binaryPropertyName] = await this.helpers.prepareBinaryData(responseData, `screenshot.${fileExtension}`, mimeType);
|
||||
|
||||
return newItem;
|
||||
}
|
||||
|
||||
return {
|
||||
json: responseData,
|
||||
};
|
||||
}
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 2.5 KiB |
|
@ -100,7 +100,6 @@
|
|||
"dist/credentials/JotFormApi.credentials.js",
|
||||
"dist/credentials/KeapOAuth2Api.credentials.js",
|
||||
"dist/credentials/LinkedInOAuth2Api.credentials.js",
|
||||
"dist/credentials/LinkFishApi.credentials.js",
|
||||
"dist/credentials/MailchimpApi.credentials.js",
|
||||
"dist/credentials/MailchimpOAuth2Api.credentials.js",
|
||||
"dist/credentials/MailgunApi.credentials.js",
|
||||
|
@ -289,7 +288,6 @@
|
|||
"dist/nodes/Keap/Keap.node.js",
|
||||
"dist/nodes/Keap/KeapTrigger.node.js",
|
||||
"dist/nodes/LinkedIn/LinkedIn.node.js",
|
||||
"dist/nodes/LinkFish/LinkFish.node.js",
|
||||
"dist/nodes/Mailchimp/Mailchimp.node.js",
|
||||
"dist/nodes/Mailchimp/MailchimpTrigger.node.js",
|
||||
"dist/nodes/Mailgun/Mailgun.node.js",
|
||||
|
|
Loading…
Reference in a new issue