n8n-nodes-tripadvisor-reviews 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +19 -0
- package/README.md +187 -0
- package/dist/credentials/ApifyApi.credentials.d.ts +10 -0
- package/dist/credentials/ApifyApi.credentials.js +36 -0
- package/dist/credentials/ApifyApi.credentials.js.map +1 -0
- package/dist/credentials/ApifyOAuth2Api.credentials.d.ts +9 -0
- package/dist/credentials/ApifyOAuth2Api.credentials.js +66 -0
- package/dist/credentials/ApifyOAuth2Api.credentials.js.map +1 -0
- package/dist/docs/actions.png +0 -0
- package/dist/docs/actor-subtitle.png +0 -0
- package/dist/docs/auth.png +0 -0
- package/dist/docs/node-description.png +0 -0
- package/dist/docs/run-actor.png +0 -0
- package/dist/docs/trigger.png +0 -0
- package/dist/docs/workflow.png +0 -0
- package/dist/icons/apify.svg +5 -0
- package/dist/nodes/ApifyTripadvisorReviews/ApifyTripadvisorReviews.node.d.ts +13 -0
- package/dist/nodes/ApifyTripadvisorReviews/ApifyTripadvisorReviews.node.js +88 -0
- package/dist/nodes/ApifyTripadvisorReviews/ApifyTripadvisorReviews.node.js.map +1 -0
- package/dist/nodes/ApifyTripadvisorReviews/ApifyTripadvisorReviews.node.json +38 -0
- package/dist/nodes/ApifyTripadvisorReviews/ApifyTripadvisorReviews.properties.d.ts +4 -0
- package/dist/nodes/ApifyTripadvisorReviews/ApifyTripadvisorReviews.properties.js +371 -0
- package/dist/nodes/ApifyTripadvisorReviews/ApifyTripadvisorReviews.properties.js.map +1 -0
- package/dist/nodes/ApifyTripadvisorReviews/helpers/executeActor.d.ts +5 -0
- package/dist/nodes/ApifyTripadvisorReviews/helpers/executeActor.js +68 -0
- package/dist/nodes/ApifyTripadvisorReviews/helpers/executeActor.js.map +1 -0
- package/dist/nodes/ApifyTripadvisorReviews/helpers/genericFunctions.d.ts +10 -0
- package/dist/nodes/ApifyTripadvisorReviews/helpers/genericFunctions.js +90 -0
- package/dist/nodes/ApifyTripadvisorReviews/helpers/genericFunctions.js.map +1 -0
- package/dist/nodes/ApifyTripadvisorReviews/logo.svg +5 -0
- package/dist/package.json +61 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +61 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright 2022 n8n
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
5
|
+
the Software without restriction, including without limitation the rights to
|
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
7
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
|
8
|
+
so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# n8n Nodes - Apify Actor Template
|
|
2
|
+
|
|
3
|
+
This template converts Apify Actors into n8n community nodes. The generation script reads your Actor's input schema and creates the node package structure, which you can then customize and publish.
|
|
4
|
+
Simply provide an Actor ID, and the script generates a complete n8n community node package using your Actor's input schema—ready to customize and publish.
|
|
5
|
+
|
|
6
|
+
[Apify](https://apify.com) is a platform for building, deploying, and publishing web automation tools called Actors, while [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform that connects various services and APIs.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Table of Contents
|
|
11
|
+
|
|
12
|
+
- [Setup](#setup)
|
|
13
|
+
- [Prerequisites](#️-prerequisites)
|
|
14
|
+
- [1. Generate Your Node](#1-generate-your-node)
|
|
15
|
+
- [2. Customize Your Node](#2-customize-your-node)
|
|
16
|
+
- [Actor schema constants](#actor-schema-constants)
|
|
17
|
+
- [Node icon](#node-icon)
|
|
18
|
+
- [Subtitle](#subtitle)
|
|
19
|
+
- [Node description](#node-description)
|
|
20
|
+
- [AI tool result filtering](#ai-tool-result-filtering)
|
|
21
|
+
- [Node discoverability](#node-discoverability)
|
|
22
|
+
- [Development](#development)
|
|
23
|
+
- [Getting help](#getting-help)
|
|
24
|
+
|
|
25
|
+
## Setup
|
|
26
|
+
|
|
27
|
+
### ⚙️ Prerequisites
|
|
28
|
+
|
|
29
|
+
- Node.js v23.11.1 or higher
|
|
30
|
+
- A valid Apify Actor ID from the [Apify Store](https://apify.com/store)
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
### 1. Generate Your Node
|
|
35
|
+
|
|
36
|
+
Install dependencies:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm install
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Run the generation script:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm run create-actor-app
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
When prompted, enter your Actor ID. Find this in your Actor's console URL, for example, if your Actor page is `https://console.apify.com/actors/aYG0l9s7dbB7j3gbS/input`, the Actor ID is `aYG0l9s7dbB7j3gbS`.
|
|
49
|
+
|
|
50
|
+
The script fetches your Actor's metadata and input schema, generates node files with proper naming, converts Actor input fields into n8n node parameters, and creates all necessary boilerplate code.
|
|
51
|
+
|
|
52
|
+
Test the generated node:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm run build
|
|
56
|
+
npm run dev
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### 2. Customize Your Node
|
|
62
|
+
|
|
63
|
+
After generation, your node files will be located in:
|
|
64
|
+
```
|
|
65
|
+
nodes/Apify<YourActorName>/
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
For example, if you converted the **Website Content Crawler** Actor, the folder will be:
|
|
69
|
+
```
|
|
70
|
+
nodes/ApifyWebsiteContentCrawler/
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
#### Customization
|
|
74
|
+
|
|
75
|
+
The generated code includes five sections labeled with `SNIPPET` comments. Search for `SNIPPET` in your IDE to locate them quickly.
|
|
76
|
+
|
|
77
|
+
##### Actor schema constants
|
|
78
|
+
|
|
79
|
+
Location: `nodes/Apify{YourActorName}/Apify{YourActorName}.node.ts`
|
|
80
|
+
|
|
81
|
+
The script generates these constants from your Actor's metadata:
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
export const ACTOR_ID = 'aYG0l9s7dbB7j3gbS'
|
|
85
|
+
export const CLASS_NAME = 'ApifyWebsiteContentCrawler'
|
|
86
|
+
export const DISPLAY_NAME = 'Apify Website Content Crawler'
|
|
87
|
+
export const DESCRIPTION = ''
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
> **Tip:** Change `DISPLAY_NAME` or `DESCRIPTION` to adjust how your node appears in the n8n interface.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
##### Node icon
|
|
95
|
+
|
|
96
|
+
Location: `nodes/Apify{YourActorName}/Apify{YourActorName}.node.ts`
|
|
97
|
+
|
|
98
|
+
The default configuration uses the Apify logo:
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
icon: 'file:logo.svg'
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Replace the SVG files in the node directory with your own branding.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
##### Subtitle
|
|
109
|
+
|
|
110
|
+
Location: `nodes/Apify{YourActorName}/Apify{YourActorName}.node.ts`
|
|
111
|
+
|
|
112
|
+
The subtitle appears beneath your node in n8n workflows:
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
subtitle: 'Run Scraper',
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+

|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
##### Node description
|
|
123
|
+
|
|
124
|
+
Location: `nodes/Apify{YourActorName}/Apify{YourActorName}.node.ts`
|
|
125
|
+
|
|
126
|
+
This description appears in n8n's node browser:
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
description: DESCRIPTION,
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+

|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
##### AI tool result filtering
|
|
137
|
+
|
|
138
|
+
Location: `nodes/Apify{YourActorName}/helpers/genericFunctions.ts`
|
|
139
|
+
|
|
140
|
+
When your node runs in AI agent workflows, reduce token usage by filtering the returned data:
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
if (isUsedAsAiTool(this.getNode().type)) {
|
|
144
|
+
results = results.map((item: any) => ({ markdown: item.markdown }));
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
AI agents perform better with clean, focused data that takes up less context.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
#### Node discoverability
|
|
153
|
+
|
|
154
|
+
The `Apify{YourActorName}.node.json` file controls where your node appears in n8n:
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"categories": ["Data & Storage", "Marketing & Content"],
|
|
159
|
+
"alias": ["crawler", "scraper", "website", "content"]
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Adjust `categories` to match your Actor's purpose and add relevant search keywords to `alias`.
|
|
164
|
+
|
|
165
|
+
The template includes pre-configured authentication in the `credentials/` directory. Users running n8n locally provide their Apify API token. Users on n8n cloud can authenticate via OAuth2.
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Development
|
|
170
|
+
|
|
171
|
+
Start n8n with your custom node:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
npm run dev
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
This launches n8n at `http://localhost:5678` with hot reloading enabled. Changes to your node files automatically refresh.
|
|
178
|
+
|
|
179
|
+
## Getting help
|
|
180
|
+
|
|
181
|
+
- [Apify API documentation](https://docs.apify.com)
|
|
182
|
+
- [n8n Community Nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
|
|
183
|
+
- [n8n community](https://community.n8n.io/)
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
> **Before publishing:** Update placeholder values in [package.json](package.json) (AUTHOR_NAME, AUTHOR_EMAIL, PACKAGE_DESCRIPTION) with your information.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class ApifyApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
icon: Icon;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
authenticate: IAuthenticateGeneric;
|
|
9
|
+
test: ICredentialTestRequest;
|
|
10
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApifyApi = void 0;
|
|
4
|
+
class ApifyApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'apifyApi';
|
|
7
|
+
this.displayName = 'Apify API';
|
|
8
|
+
this.documentationUrl = 'https://docs.apify.com/platform/integrations/api#api-token';
|
|
9
|
+
this.icon = "file:../nodes/ApifyTripadvisorReviews/logo.svg";
|
|
10
|
+
this.properties = [
|
|
11
|
+
{
|
|
12
|
+
displayName: 'API Key',
|
|
13
|
+
name: 'apiKey',
|
|
14
|
+
type: 'string',
|
|
15
|
+
typeOptions: { password: true },
|
|
16
|
+
default: '',
|
|
17
|
+
},
|
|
18
|
+
];
|
|
19
|
+
this.authenticate = {
|
|
20
|
+
type: 'generic',
|
|
21
|
+
properties: {
|
|
22
|
+
headers: {
|
|
23
|
+
Authorization: '=Bearer {{$credentials.apiKey}}',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
this.test = {
|
|
28
|
+
request: {
|
|
29
|
+
method: 'GET',
|
|
30
|
+
url: 'https://api.apify.com/v2/me',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ApifyApi = ApifyApi;
|
|
36
|
+
//# sourceMappingURL=ApifyApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApifyApi.credentials.js","sourceRoot":"","sources":["../../credentials/ApifyApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,QAAQ;IAArB;QACC,SAAI,GAAG,UAAU,CAAC;QAElB,gBAAW,GAAG,WAAW,CAAC;QAE1B,qBAAgB,GAAG,4DAA4D,CAAC;QAEhF,SAAI,GAAS,gDAAgD,CAAA;QAE7D,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;aACX;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;QAKF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,6BAA6B;aAClC;SACD,CAAC;IACH,CAAC;CAAA;AArCD,4BAqCC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Icon, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class ApifyOAuth2Api implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
extends: string[];
|
|
5
|
+
displayName: string;
|
|
6
|
+
icon: Icon;
|
|
7
|
+
documentationUrl: string;
|
|
8
|
+
properties: INodeProperties[];
|
|
9
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApifyOAuth2Api = void 0;
|
|
4
|
+
const scopes = ['profile', 'full_api_access'];
|
|
5
|
+
class ApifyOAuth2Api {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.name = 'apifyOAuth2Api';
|
|
8
|
+
this.extends = ['oAuth2Api'];
|
|
9
|
+
this.displayName = 'Apify OAuth2 API';
|
|
10
|
+
this.icon = "file:../nodes/ApifyTripadvisorReviews/logo.svg";
|
|
11
|
+
this.documentationUrl = 'https://docs.apify.com/api/v2';
|
|
12
|
+
this.properties = [
|
|
13
|
+
{
|
|
14
|
+
displayName: 'Grant Type',
|
|
15
|
+
name: 'grantType',
|
|
16
|
+
type: 'hidden',
|
|
17
|
+
default: 'pkce',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
displayName: 'Authorization URL',
|
|
21
|
+
name: 'authUrl',
|
|
22
|
+
type: 'hidden',
|
|
23
|
+
default: 'https://console.apify.com/authorize/oauth',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
displayName: 'Access Token URL',
|
|
27
|
+
name: 'accessTokenUrl',
|
|
28
|
+
type: 'hidden',
|
|
29
|
+
default: 'https://console-backend.apify.com/oauth/apps/token',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
displayName: 'Scope',
|
|
33
|
+
name: 'scope',
|
|
34
|
+
type: 'hidden',
|
|
35
|
+
default: `${scopes.join(' ')}`,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
displayName: 'Auth URI Query Parameters',
|
|
39
|
+
name: 'authQueryParameters',
|
|
40
|
+
type: 'hidden',
|
|
41
|
+
default: '',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
displayName: 'Authentication',
|
|
45
|
+
name: 'authentication',
|
|
46
|
+
type: 'hidden',
|
|
47
|
+
default: 'header',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
displayName: 'Client ID',
|
|
51
|
+
name: 'clientId',
|
|
52
|
+
type: 'hidden',
|
|
53
|
+
default: '',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
displayName: 'Client Secret',
|
|
57
|
+
name: 'clientSecret',
|
|
58
|
+
type: 'hidden',
|
|
59
|
+
default: '',
|
|
60
|
+
typeOptions: { password: true },
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.ApifyOAuth2Api = ApifyOAuth2Api;
|
|
66
|
+
//# sourceMappingURL=ApifyOAuth2Api.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApifyOAuth2Api.credentials.js","sourceRoot":"","sources":["../../credentials/ApifyOAuth2Api.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAE9C,MAAa,cAAc;IAA3B;QACC,SAAI,GAAG,gBAAgB,CAAC;QAExB,YAAO,GAAG,CAAC,WAAW,CAAC,CAAC;QAExB,gBAAW,GAAG,kBAAkB,CAAC;QAEjC,SAAI,GAAS,gDAAgD,CAAA;QAG7D,qBAAgB,GAAG,+BAA+B,CAAC;QAEnD,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;aACf;YACD;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,2CAA2C;aACpD;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,oDAAoD;aAC7D;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;aAC9B;YACD;gBACC,WAAW,EAAE,2BAA2B;gBACxC,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,QAAQ;aACjB;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;aAC/B;SACD,CAAC;IACH,CAAC;CAAA;AA/DD,wCA+DC"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg width="150" height="150" viewBox="0 0 150 150" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M86.0214 0H147.727C148.982 0 150 1.01753 150 2.27273V96.5744C150 98.8332 147.062 99.7089 145.826 97.8188L84.1196 3.51714C83.1305 2.00559 84.215 0 86.0214 0Z" fill="#246DFF"/>
|
|
3
|
+
<path d="M63.9786 0H2.27273C1.01753 0 0 1.01753 0 2.27273V96.5744C0 98.8332 2.93774 99.7089 4.1745 97.8188L65.8804 3.51714C66.8695 2.00559 65.785 0 63.9786 0Z" fill="#20A34E"/>
|
|
4
|
+
<path d="M73.9429 75.5012L3.84485 146.126C2.42137 147.56 3.43724 150 5.45792 150H144.6C146.612 150 147.632 147.578 146.225 146.139L77.1811 75.5135C76.2942 74.6063 74.8365 74.6008 73.9429 75.5012Z" fill="#F86606"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
export declare const ACTOR_ID: string;
|
|
3
|
+
export declare const PACKAGE_NAME: string;
|
|
4
|
+
export declare const CLASS_NAME: string;
|
|
5
|
+
export declare const ClassNameCamel: string;
|
|
6
|
+
export declare const X_PLATFORM_HEADER_ID: string;
|
|
7
|
+
export declare const X_PLATFORM_APP_HEADER_ID: string;
|
|
8
|
+
export declare const DISPLAY_NAME: string;
|
|
9
|
+
export declare const DESCRIPTION: string;
|
|
10
|
+
export declare class ApifyTripadvisorReviews implements INodeType {
|
|
11
|
+
description: INodeTypeDescription;
|
|
12
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApifyTripadvisorReviews = exports.DESCRIPTION = exports.DISPLAY_NAME = exports.X_PLATFORM_APP_HEADER_ID = exports.X_PLATFORM_HEADER_ID = exports.ClassNameCamel = exports.CLASS_NAME = exports.PACKAGE_NAME = exports.ACTOR_ID = void 0;
|
|
4
|
+
const ApifyTripadvisorReviews_properties_1 = require("./ApifyTripadvisorReviews.properties");
|
|
5
|
+
const executeActor_1 = require("./helpers/executeActor");
|
|
6
|
+
exports.ACTOR_ID = 'LmG7QSGPFvMVX5ovX';
|
|
7
|
+
exports.PACKAGE_NAME = 'n8n-nodes-tripadvisor-reviews';
|
|
8
|
+
exports.CLASS_NAME = 'ApifyTripadvisorReviews';
|
|
9
|
+
exports.ClassNameCamel = exports.CLASS_NAME.charAt(0).toLowerCase() + exports.CLASS_NAME.slice(1);
|
|
10
|
+
exports.X_PLATFORM_HEADER_ID = 'n8n';
|
|
11
|
+
exports.X_PLATFORM_APP_HEADER_ID = 'tripadvisor-reviews-app';
|
|
12
|
+
exports.DISPLAY_NAME = 'Apify Tripadvisor Reviews';
|
|
13
|
+
exports.DESCRIPTION = 'Scrape reviews from Tripadvisor for Hotels and Restaurants. Filter by language, rating, traveller type, and time of year. Sort by most recent or most detailed. Fast and efficient.';
|
|
14
|
+
class ApifyTripadvisorReviews {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.description = {
|
|
17
|
+
displayName: exports.DISPLAY_NAME,
|
|
18
|
+
name: exports.ClassNameCamel,
|
|
19
|
+
icon: 'file:logo.svg',
|
|
20
|
+
group: ['transform'],
|
|
21
|
+
version: [1],
|
|
22
|
+
defaultVersion: 1,
|
|
23
|
+
subtitle: 'Run Scraper',
|
|
24
|
+
description: exports.DESCRIPTION,
|
|
25
|
+
defaults: {
|
|
26
|
+
name: exports.DISPLAY_NAME,
|
|
27
|
+
},
|
|
28
|
+
inputs: ["main"],
|
|
29
|
+
outputs: ["main"],
|
|
30
|
+
usableAsTool: true,
|
|
31
|
+
credentials: [
|
|
32
|
+
{
|
|
33
|
+
displayName: 'Apify API key connection',
|
|
34
|
+
name: 'apifyApi',
|
|
35
|
+
required: false,
|
|
36
|
+
displayOptions: {
|
|
37
|
+
show: {
|
|
38
|
+
authentication: ['apifyApi'],
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
displayName: 'Apify OAuth2 connection',
|
|
44
|
+
name: 'apifyOAuth2Api',
|
|
45
|
+
required: false,
|
|
46
|
+
displayOptions: {
|
|
47
|
+
show: {
|
|
48
|
+
authentication: ['apifyOAuth2Api'],
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
properties: ApifyTripadvisorReviews_properties_1.properties,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async execute() {
|
|
57
|
+
const items = this.getInputData();
|
|
58
|
+
const returnData = [];
|
|
59
|
+
for (let i = 0; i < items.length; i++) {
|
|
60
|
+
try {
|
|
61
|
+
const data = await executeActor_1.runActor.call(this, i);
|
|
62
|
+
const addPairedItem = (item) => ({
|
|
63
|
+
...item,
|
|
64
|
+
pairedItem: { item: i },
|
|
65
|
+
});
|
|
66
|
+
if (Array.isArray(data)) {
|
|
67
|
+
returnData.push(...data.map(addPairedItem));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
returnData.push(addPairedItem(data));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (this.continueOnFail()) {
|
|
75
|
+
returnData.push({
|
|
76
|
+
json: { error: error.message },
|
|
77
|
+
pairedItem: { item: i },
|
|
78
|
+
});
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return [returnData];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.ApifyTripadvisorReviews = ApifyTripadvisorReviews;
|
|
88
|
+
//# sourceMappingURL=ApifyTripadvisorReviews.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApifyTripadvisorReviews.node.js","sourceRoot":"","sources":["../../../nodes/ApifyTripadvisorReviews/ApifyTripadvisorReviews.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "n8n-nodes-tripadvisor-reviews",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": [
|
|
6
|
+
"Development",
|
|
7
|
+
"Marketing & Content",
|
|
8
|
+
"Sales",
|
|
9
|
+
"Analytics",
|
|
10
|
+
"Utility",
|
|
11
|
+
"Data & Storage"
|
|
12
|
+
],
|
|
13
|
+
"resources": {
|
|
14
|
+
"credentialDocumentation": [
|
|
15
|
+
{
|
|
16
|
+
"url": "https://docs.apify.com/platform/integrations/n8n"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"primaryDocumentation": [
|
|
20
|
+
{
|
|
21
|
+
"url": "https://apify.com/datasaurus/tripadvisor-reviews"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"alias": [
|
|
26
|
+
"apify",
|
|
27
|
+
"actor",
|
|
28
|
+
"serp",
|
|
29
|
+
"llm",
|
|
30
|
+
"ai agent",
|
|
31
|
+
"scrape",
|
|
32
|
+
"crawler",
|
|
33
|
+
"web",
|
|
34
|
+
"dataset",
|
|
35
|
+
"search",
|
|
36
|
+
"data extraction"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare function buildActorInput(context: IExecuteFunctions, itemIndex: number, defaultInput: Record<string, any>): Record<string, any>;
|
|
3
|
+
export declare const actorProperties: INodeProperties[];
|
|
4
|
+
export declare const properties: INodeProperties[];
|