@memberjunction/actions-bizapps-social 2.112.0 → 2.113.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +13 -0
- package/dist/base/base-social.action.d.ts.map +1 -1
- package/dist/base/base-social.action.js +24 -18
- package/dist/base/base-social.action.js.map +1 -1
- package/dist/providers/buffer/buffer-base.action.d.ts.map +1 -1
- package/dist/providers/buffer/buffer-base.action.js +34 -35
- package/dist/providers/buffer/buffer-base.action.js.map +1 -1
- package/dist/providers/facebook/actions/boost-post.action.d.ts.map +1 -1
- package/dist/providers/facebook/actions/boost-post.action.js +33 -33
- package/dist/providers/facebook/actions/boost-post.action.js.map +1 -1
- package/dist/providers/facebook/actions/create-album.action.d.ts.map +1 -1
- package/dist/providers/facebook/actions/create-album.action.js +36 -34
- package/dist/providers/facebook/actions/create-album.action.js.map +1 -1
- package/dist/providers/facebook/actions/create-post.action.d.ts.map +1 -1
- package/dist/providers/facebook/actions/create-post.action.js +20 -20
- package/dist/providers/facebook/actions/create-post.action.js.map +1 -1
- package/dist/providers/facebook/actions/get-page-insights.action.d.ts.map +1 -1
- package/dist/providers/facebook/actions/get-page-insights.action.js +27 -25
- package/dist/providers/facebook/actions/get-page-insights.action.js.map +1 -1
- package/dist/providers/facebook/actions/get-page-posts.action.d.ts.map +1 -1
- package/dist/providers/facebook/actions/get-page-posts.action.js +23 -19
- package/dist/providers/facebook/actions/get-page-posts.action.js.map +1 -1
- package/dist/providers/facebook/actions/get-post-insights.action.d.ts.map +1 -1
- package/dist/providers/facebook/actions/get-post-insights.action.js +32 -28
- package/dist/providers/facebook/actions/get-post-insights.action.js.map +1 -1
- package/dist/providers/facebook/actions/respond-to-comments.action.d.ts.map +1 -1
- package/dist/providers/facebook/actions/respond-to-comments.action.js +44 -42
- package/dist/providers/facebook/actions/respond-to-comments.action.js.map +1 -1
- package/dist/providers/facebook/actions/schedule-post.action.d.ts.map +1 -1
- package/dist/providers/facebook/actions/schedule-post.action.js +29 -29
- package/dist/providers/facebook/actions/schedule-post.action.js.map +1 -1
- package/dist/providers/facebook/actions/search-posts.action.d.ts.map +1 -1
- package/dist/providers/facebook/actions/search-posts.action.js +39 -37
- package/dist/providers/facebook/actions/search-posts.action.js.map +1 -1
- package/dist/providers/facebook/facebook-base.action.d.ts.map +1 -1
- package/dist/providers/facebook/facebook-base.action.js +59 -44
- package/dist/providers/facebook/facebook-base.action.js.map +1 -1
- package/dist/providers/hootsuite/actions/bulk-schedule-posts.action.d.ts.map +1 -1
- package/dist/providers/hootsuite/actions/bulk-schedule-posts.action.js +31 -33
- package/dist/providers/hootsuite/actions/bulk-schedule-posts.action.js.map +1 -1
- package/dist/providers/hootsuite/actions/create-scheduled-post.action.d.ts.map +1 -1
- package/dist/providers/hootsuite/actions/create-scheduled-post.action.js +32 -28
- package/dist/providers/hootsuite/actions/create-scheduled-post.action.js.map +1 -1
- package/dist/providers/hootsuite/actions/delete-scheduled-post.action.d.ts.map +1 -1
- package/dist/providers/hootsuite/actions/delete-scheduled-post.action.js +19 -19
- package/dist/providers/hootsuite/actions/delete-scheduled-post.action.js.map +1 -1
- package/dist/providers/hootsuite/actions/get-analytics.action.d.ts.map +1 -1
- package/dist/providers/hootsuite/actions/get-analytics.action.js +26 -24
- package/dist/providers/hootsuite/actions/get-analytics.action.js.map +1 -1
- package/dist/providers/hootsuite/actions/get-scheduled-posts.action.d.ts.map +1 -1
- package/dist/providers/hootsuite/actions/get-scheduled-posts.action.js +22 -22
- package/dist/providers/hootsuite/actions/get-scheduled-posts.action.js.map +1 -1
- package/dist/providers/hootsuite/actions/get-social-profiles.action.d.ts.map +1 -1
- package/dist/providers/hootsuite/actions/get-social-profiles.action.js +34 -32
- package/dist/providers/hootsuite/actions/get-social-profiles.action.js.map +1 -1
- package/dist/providers/hootsuite/actions/search-posts.action.d.ts.map +1 -1
- package/dist/providers/hootsuite/actions/search-posts.action.js +52 -43
- package/dist/providers/hootsuite/actions/search-posts.action.js.map +1 -1
- package/dist/providers/hootsuite/actions/update-scheduled-post.action.d.ts.map +1 -1
- package/dist/providers/hootsuite/actions/update-scheduled-post.action.js +28 -30
- package/dist/providers/hootsuite/actions/update-scheduled-post.action.js.map +1 -1
- package/dist/providers/hootsuite/hootsuite-base.action.d.ts.map +1 -1
- package/dist/providers/hootsuite/hootsuite-base.action.js +20 -18
- package/dist/providers/hootsuite/hootsuite-base.action.js.map +1 -1
- package/dist/providers/instagram/actions/create-post.action.d.ts.map +1 -1
- package/dist/providers/instagram/actions/create-post.action.js +26 -27
- package/dist/providers/instagram/actions/create-post.action.js.map +1 -1
- package/dist/providers/instagram/actions/create-story.action.d.ts.map +1 -1
- package/dist/providers/instagram/actions/create-story.action.js +35 -35
- package/dist/providers/instagram/actions/create-story.action.js.map +1 -1
- package/dist/providers/instagram/actions/get-account-insights.action.d.ts.map +1 -1
- package/dist/providers/instagram/actions/get-account-insights.action.js +59 -38
- package/dist/providers/instagram/actions/get-account-insights.action.js.map +1 -1
- package/dist/providers/instagram/actions/get-business-posts.action.d.ts.map +1 -1
- package/dist/providers/instagram/actions/get-business-posts.action.js +29 -29
- package/dist/providers/instagram/actions/get-business-posts.action.js.map +1 -1
- package/dist/providers/instagram/actions/get-comments.action.d.ts.map +1 -1
- package/dist/providers/instagram/actions/get-comments.action.js +36 -36
- package/dist/providers/instagram/actions/get-comments.action.js.map +1 -1
- package/dist/providers/instagram/actions/get-post-insights.action.d.ts.map +1 -1
- package/dist/providers/instagram/actions/get-post-insights.action.js +25 -23
- package/dist/providers/instagram/actions/get-post-insights.action.js.map +1 -1
- package/dist/providers/instagram/actions/schedule-post.action.d.ts.map +1 -1
- package/dist/providers/instagram/actions/schedule-post.action.js +25 -25
- package/dist/providers/instagram/actions/schedule-post.action.js.map +1 -1
- package/dist/providers/instagram/actions/search-posts.action.d.ts.map +1 -1
- package/dist/providers/instagram/actions/search-posts.action.js +60 -56
- package/dist/providers/instagram/actions/search-posts.action.js.map +1 -1
- package/dist/providers/instagram/instagram-base.action.d.ts.map +1 -1
- package/dist/providers/instagram/instagram-base.action.js +27 -25
- package/dist/providers/instagram/instagram-base.action.js.map +1 -1
- package/dist/providers/linkedin/actions/create-article.action.d.ts.map +1 -1
- package/dist/providers/linkedin/actions/create-article.action.js +45 -55
- package/dist/providers/linkedin/actions/create-article.action.js.map +1 -1
- package/dist/providers/linkedin/actions/create-post.action.d.ts.map +1 -1
- package/dist/providers/linkedin/actions/create-post.action.js +29 -31
- package/dist/providers/linkedin/actions/create-post.action.js.map +1 -1
- package/dist/providers/linkedin/actions/get-followers.action.d.ts.map +1 -1
- package/dist/providers/linkedin/actions/get-followers.action.js +28 -28
- package/dist/providers/linkedin/actions/get-followers.action.js.map +1 -1
- package/dist/providers/linkedin/actions/get-organization-posts.action.d.ts.map +1 -1
- package/dist/providers/linkedin/actions/get-organization-posts.action.js +20 -20
- package/dist/providers/linkedin/actions/get-organization-posts.action.js.map +1 -1
- package/dist/providers/linkedin/actions/get-personal-posts.action.d.ts.map +1 -1
- package/dist/providers/linkedin/actions/get-personal-posts.action.js +19 -19
- package/dist/providers/linkedin/actions/get-personal-posts.action.js.map +1 -1
- package/dist/providers/linkedin/actions/get-post-analytics.action.d.ts.map +1 -1
- package/dist/providers/linkedin/actions/get-post-analytics.action.js +23 -25
- package/dist/providers/linkedin/actions/get-post-analytics.action.js.map +1 -1
- package/dist/providers/linkedin/actions/schedule-post.action.d.ts.map +1 -1
- package/dist/providers/linkedin/actions/schedule-post.action.js +30 -32
- package/dist/providers/linkedin/actions/schedule-post.action.js.map +1 -1
- package/dist/providers/linkedin/actions/search-posts.action.d.ts.map +1 -1
- package/dist/providers/linkedin/actions/search-posts.action.js +30 -28
- package/dist/providers/linkedin/actions/search-posts.action.js.map +1 -1
- package/dist/providers/linkedin/linkedin-base.action.d.ts.map +1 -1
- package/dist/providers/linkedin/linkedin-base.action.js +38 -33
- package/dist/providers/linkedin/linkedin-base.action.js.map +1 -1
- package/dist/providers/tiktok/tiktok-base.action.d.ts.map +1 -1
- package/dist/providers/tiktok/tiktok-base.action.js +26 -25
- package/dist/providers/tiktok/tiktok-base.action.js.map +1 -1
- package/dist/providers/twitter/actions/create-thread.action.d.ts.map +1 -1
- package/dist/providers/twitter/actions/create-thread.action.js +29 -25
- package/dist/providers/twitter/actions/create-thread.action.js.map +1 -1
- package/dist/providers/twitter/actions/create-tweet.action.d.ts.map +1 -1
- package/dist/providers/twitter/actions/create-tweet.action.js +23 -23
- package/dist/providers/twitter/actions/create-tweet.action.js.map +1 -1
- package/dist/providers/twitter/actions/delete-tweet.action.d.ts.map +1 -1
- package/dist/providers/twitter/actions/delete-tweet.action.js +19 -19
- package/dist/providers/twitter/actions/delete-tweet.action.js.map +1 -1
- package/dist/providers/twitter/actions/get-analytics.action.d.ts.map +1 -1
- package/dist/providers/twitter/actions/get-analytics.action.js +47 -40
- package/dist/providers/twitter/actions/get-analytics.action.js.map +1 -1
- package/dist/providers/twitter/actions/get-mentions.action.d.ts.map +1 -1
- package/dist/providers/twitter/actions/get-mentions.action.js +31 -30
- package/dist/providers/twitter/actions/get-mentions.action.js.map +1 -1
- package/dist/providers/twitter/actions/get-timeline.action.d.ts.map +1 -1
- package/dist/providers/twitter/actions/get-timeline.action.js +29 -29
- package/dist/providers/twitter/actions/get-timeline.action.js.map +1 -1
- package/dist/providers/twitter/actions/schedule-tweet.action.d.ts.map +1 -1
- package/dist/providers/twitter/actions/schedule-tweet.action.js +26 -26
- package/dist/providers/twitter/actions/schedule-tweet.action.js.map +1 -1
- package/dist/providers/twitter/actions/search-tweets.action.d.ts.map +1 -1
- package/dist/providers/twitter/actions/search-tweets.action.js +58 -56
- package/dist/providers/twitter/actions/search-tweets.action.js.map +1 -1
- package/dist/providers/twitter/twitter-base.action.d.ts.map +1 -1
- package/dist/providers/twitter/twitter-base.action.js +68 -58
- package/dist/providers/twitter/twitter-base.action.js.map +1 -1
- package/dist/providers/youtube/youtube-base.action.d.ts +1 -1
- package/dist/providers/youtube/youtube-base.action.d.ts.map +1 -1
- package/dist/providers/youtube/youtube-base.action.js +25 -22
- package/dist/providers/youtube/youtube-base.action.js.map +1 -1
- package/package.json +6 -5
- package/src/base/base-social.action.ts +224 -217
- package/src/providers/buffer/buffer-base.action.ts +441 -435
- package/src/providers/facebook/actions/boost-post.action.ts +386 -350
- package/src/providers/facebook/actions/create-album.action.ts +307 -291
- package/src/providers/facebook/actions/create-post.action.ts +227 -224
- package/src/providers/facebook/actions/get-page-insights.action.ts +403 -383
- package/src/providers/facebook/actions/get-page-posts.action.ts +225 -214
- package/src/providers/facebook/actions/get-post-insights.action.ts +316 -300
- package/src/providers/facebook/actions/respond-to-comments.action.ts +336 -319
- package/src/providers/facebook/actions/schedule-post.action.ts +292 -289
- package/src/providers/facebook/actions/search-posts.action.ts +413 -399
- package/src/providers/facebook/facebook-base.action.ts +670 -653
- package/src/providers/hootsuite/actions/bulk-schedule-posts.action.ts +257 -257
- package/src/providers/hootsuite/actions/create-scheduled-post.action.ts +189 -184
- package/src/providers/hootsuite/actions/delete-scheduled-post.action.ts +161 -160
- package/src/providers/hootsuite/actions/get-analytics.action.ts +254 -249
- package/src/providers/hootsuite/actions/get-scheduled-posts.action.ts +207 -206
- package/src/providers/hootsuite/actions/get-social-profiles.action.ts +205 -206
- package/src/providers/hootsuite/actions/search-posts.action.ts +369 -351
- package/src/providers/hootsuite/actions/update-scheduled-post.action.ts +209 -211
- package/src/providers/hootsuite/hootsuite-base.action.ts +307 -301
- package/src/providers/instagram/actions/create-post.action.ts +296 -276
- package/src/providers/instagram/actions/create-story.action.ts +394 -378
- package/src/providers/instagram/actions/get-account-insights.action.ts +420 -384
- package/src/providers/instagram/actions/get-business-posts.action.ts +242 -233
- package/src/providers/instagram/actions/get-comments.action.ts +377 -365
- package/src/providers/instagram/actions/get-post-insights.action.ts +273 -265
- package/src/providers/instagram/actions/schedule-post.action.ts +235 -233
- package/src/providers/instagram/actions/search-posts.action.ts +538 -512
- package/src/providers/instagram/instagram-base.action.ts +393 -368
- package/src/providers/linkedin/actions/create-article.action.ts +266 -275
- package/src/providers/linkedin/actions/create-post.action.ts +177 -179
- package/src/providers/linkedin/actions/get-followers.action.ts +211 -211
- package/src/providers/linkedin/actions/get-organization-posts.action.ts +147 -146
- package/src/providers/linkedin/actions/get-personal-posts.action.ts +139 -138
- package/src/providers/linkedin/actions/get-post-analytics.action.ts +189 -190
- package/src/providers/linkedin/actions/schedule-post.action.ts +189 -191
- package/src/providers/linkedin/actions/search-posts.action.ts +283 -275
- package/src/providers/linkedin/linkedin-base.action.ts +421 -407
- package/src/providers/tiktok/tiktok-base.action.ts +320 -305
- package/src/providers/twitter/actions/create-thread.action.ts +207 -203
- package/src/providers/twitter/actions/create-tweet.action.ts +188 -187
- package/src/providers/twitter/actions/delete-tweet.action.ts +129 -128
- package/src/providers/twitter/actions/get-analytics.action.ts +411 -402
- package/src/providers/twitter/actions/get-mentions.action.ts +219 -218
- package/src/providers/twitter/actions/get-timeline.action.ts +233 -232
- package/src/providers/twitter/actions/schedule-tweet.action.ts +222 -221
- package/src/providers/twitter/actions/search-tweets.action.ts +543 -540
- package/src/providers/twitter/twitter-base.action.ts +560 -541
- package/src/providers/youtube/youtube-base.action.ts +333 -320
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { RegisterClass } from '@memberjunction/global';
|
|
2
2
|
import { LinkedInBaseAction, LinkedInAnalytics } from '../linkedin-base.action';
|
|
3
3
|
import { ActionParam, ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
4
|
-
import { LogStatus, LogError } from '@memberjunction/
|
|
4
|
+
import { LogStatus, LogError } from '@memberjunction/core';
|
|
5
5
|
import { SocialAnalytics } from '../../../base/base-social.action';
|
|
6
6
|
import { BaseAction } from '@memberjunction/actions';
|
|
7
7
|
|
|
@@ -10,198 +10,197 @@ import { BaseAction } from '@memberjunction/actions';
|
|
|
10
10
|
*/
|
|
11
11
|
@RegisterClass(BaseAction, 'LinkedInGetPostAnalyticsAction')
|
|
12
12
|
export class LinkedInGetPostAnalyticsAction extends LinkedInBaseAction {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Get analytics for a specific LinkedIn post
|
|
15
|
+
*/
|
|
16
|
+
protected async InternalRunAction(params: RunActionParams): Promise<ActionResultSimple> {
|
|
17
|
+
const { Params, ContextUser } = params;
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
// Initialize OAuth
|
|
21
|
+
const companyIntegrationId = this.getParamValue(Params, 'CompanyIntegrationID');
|
|
22
|
+
if (!await this.initializeOAuth(companyIntegrationId)) {
|
|
23
|
+
throw new Error('Failed to initialize OAuth connection');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Extract parameters
|
|
27
|
+
const postId = this.getParamValue(Params, 'PostID');
|
|
28
|
+
const authorType = this.getParamValue(Params, 'AuthorType') || 'organization'; // 'personal' or 'organization'
|
|
29
|
+
const organizationId = this.getParamValue(Params, 'OrganizationID');
|
|
30
|
+
const timeRange = this.getParamValue(Params, 'TimeRange'); // Optional: {start: Date, end: Date}
|
|
31
|
+
|
|
32
|
+
// Validate required parameters
|
|
33
|
+
if (!postId) {
|
|
34
|
+
throw new Error('PostID is required');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let analytics: LinkedInAnalytics | null = null;
|
|
38
|
+
|
|
39
|
+
if (authorType === 'organization') {
|
|
40
|
+
// Get organization analytics
|
|
41
|
+
let organizationUrn: string;
|
|
42
|
+
if (!organizationId) {
|
|
43
|
+
// Get first admin organization if not specified
|
|
44
|
+
const orgs = await this.getAdminOrganizations();
|
|
45
|
+
if (orgs.length === 0) {
|
|
46
|
+
throw new Error('No organizations found. Please specify OrganizationID.');
|
|
47
|
+
}
|
|
48
|
+
organizationUrn = orgs[0].urn;
|
|
49
|
+
LogStatus(`Using organization: ${orgs[0].name}`);
|
|
50
|
+
} else {
|
|
51
|
+
organizationUrn = `urn:li:organization:${organizationId}`;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
analytics = await this.getOrganizationPostAnalytics(postId, organizationUrn, timeRange);
|
|
55
|
+
} else {
|
|
56
|
+
// Get personal post analytics (limited)
|
|
57
|
+
analytics = await this.getPersonalPostAnalytics(postId);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (!analytics) {
|
|
61
|
+
throw new Error('No analytics data available for this post');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Normalize analytics
|
|
65
|
+
const normalizedAnalytics = this.normalizeAnalytics(analytics);
|
|
66
|
+
|
|
67
|
+
// Update output parameters
|
|
68
|
+
const outputParams = [...Params];
|
|
69
|
+
const analyticsParam = outputParams.find(p => p.Name === 'Analytics');
|
|
70
|
+
if (analyticsParam) analyticsParam.Value = normalizedAnalytics;
|
|
71
|
+
const rawAnalyticsParam = outputParams.find(p => p.Name === 'RawAnalytics');
|
|
72
|
+
if (rawAnalyticsParam) rawAnalyticsParam.Value = analytics;
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
Success: true,
|
|
76
|
+
ResultCode: 'SUCCESS',
|
|
77
|
+
Message: `Successfully retrieved analytics for post ${postId}`,
|
|
78
|
+
Params: outputParams
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
} catch (error) {
|
|
82
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
Success: false,
|
|
86
|
+
ResultCode: 'ERROR',
|
|
87
|
+
Message: `Failed to get post analytics: ${errorMessage}`,
|
|
88
|
+
Params
|
|
89
|
+
};
|
|
52
90
|
}
|
|
91
|
+
}
|
|
53
92
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Get analytics for an organization post
|
|
95
|
+
*/
|
|
96
|
+
private async getOrganizationPostAnalytics(shareId: string, organizationUrn: string, timeRange?: any): Promise<LinkedInAnalytics> {
|
|
97
|
+
try {
|
|
98
|
+
const params: any = {
|
|
99
|
+
q: 'organizationalEntity',
|
|
100
|
+
organizationalEntity: organizationUrn,
|
|
101
|
+
shares: `List(${shareId})`
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
// Add time range if specified
|
|
105
|
+
if (timeRange) {
|
|
106
|
+
if (timeRange.start) {
|
|
107
|
+
params.timeIntervals = `List((start:${new Date(timeRange.start).getTime()},end:${new Date(timeRange.end || Date.now()).getTime()}))`;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const response = await this.axiosInstance.get('/organizationalEntityShareStatistics', { params });
|
|
112
|
+
|
|
113
|
+
if (response.data.elements && response.data.elements.length > 0) {
|
|
114
|
+
const stats = response.data.elements[0];
|
|
115
|
+
return {
|
|
116
|
+
totalShareStatistics: stats.totalShareStatistics || {},
|
|
117
|
+
timeRange: timeRange ? {
|
|
118
|
+
start: new Date(timeRange.start).getTime(),
|
|
119
|
+
end: new Date(timeRange.end || Date.now()).getTime()
|
|
120
|
+
} : undefined
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
throw new Error('No analytics data found');
|
|
125
|
+
} catch (error) {
|
|
126
|
+
LogError(`Failed to get organization post analytics: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
89
129
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Get analytics for a personal post (limited data available)
|
|
133
|
+
*/
|
|
134
|
+
private async getPersonalPostAnalytics(shareId: string): Promise<LinkedInAnalytics> {
|
|
135
|
+
try {
|
|
136
|
+
// For personal posts, we need to fetch the post itself to get basic engagement metrics
|
|
137
|
+
const response = await this.axiosInstance.get(`/ugcPosts/${shareId}`);
|
|
138
|
+
|
|
139
|
+
if (response.data) {
|
|
140
|
+
// Extract available metrics from the post data
|
|
141
|
+
return {
|
|
142
|
+
totalShareStatistics: {
|
|
143
|
+
impressionCount: 0, // Not available for personal posts
|
|
144
|
+
clickCount: 0, // Not available for personal posts
|
|
145
|
+
engagement: response.data.likesSummary?.totalLikes || 0 + response.data.commentsSummary?.totalComments || 0,
|
|
146
|
+
likeCount: response.data.likesSummary?.totalLikes || 0,
|
|
147
|
+
commentCount: response.data.commentsSummary?.totalComments || 0,
|
|
148
|
+
shareCount: 0, // Not directly available
|
|
149
|
+
uniqueImpressionsCount: 0 // Not available for personal posts
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
throw new Error('Post not found');
|
|
155
|
+
} catch (error) {
|
|
156
|
+
LogError(`Failed to get personal post analytics: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
157
|
+
throw error;
|
|
107
158
|
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
const response = await this.axiosInstance.get('/organizationalEntityShareStatistics', { params });
|
|
111
|
-
|
|
112
|
-
if (response.data.elements && response.data.elements.length > 0) {
|
|
113
|
-
const stats = response.data.elements[0];
|
|
114
|
-
return {
|
|
115
|
-
totalShareStatistics: stats.totalShareStatistics || {},
|
|
116
|
-
timeRange: timeRange
|
|
117
|
-
? {
|
|
118
|
-
start: new Date(timeRange.start).getTime(),
|
|
119
|
-
end: new Date(timeRange.end || Date.now()).getTime(),
|
|
120
|
-
}
|
|
121
|
-
: undefined,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
throw new Error('No analytics data found');
|
|
126
|
-
} catch (error) {
|
|
127
|
-
LogError(`Failed to get organization post analytics: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
128
|
-
throw error;
|
|
129
159
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Define the parameters this action expects
|
|
163
|
+
*/
|
|
164
|
+
public get Params(): ActionParam[] {
|
|
165
|
+
return [
|
|
166
|
+
...this.commonSocialParams,
|
|
167
|
+
{
|
|
168
|
+
Name: 'PostID',
|
|
169
|
+
Type: 'Input',
|
|
170
|
+
Value: null
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
Name: 'AuthorType',
|
|
174
|
+
Type: 'Input',
|
|
175
|
+
Value: 'organization' // 'personal' or 'organization'
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
Name: 'OrganizationID',
|
|
179
|
+
Type: 'Input',
|
|
180
|
+
Value: null
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
Name: 'TimeRange',
|
|
184
|
+
Type: 'Input',
|
|
185
|
+
Value: null // Optional: {start: Date, end: Date}
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
Name: 'Analytics',
|
|
189
|
+
Type: 'Output',
|
|
190
|
+
Value: null
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
Name: 'RawAnalytics',
|
|
194
|
+
Type: 'Output',
|
|
195
|
+
Value: null
|
|
196
|
+
}
|
|
197
|
+
];
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Get action description
|
|
202
|
+
*/
|
|
203
|
+
public get Description(): string {
|
|
204
|
+
return 'Retrieves detailed analytics for a LinkedIn post (organization posts have more detailed analytics than personal posts)';
|
|
159
205
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Define the parameters this action expects
|
|
164
|
-
*/
|
|
165
|
-
public get Params(): ActionParam[] {
|
|
166
|
-
return [
|
|
167
|
-
...this.commonSocialParams,
|
|
168
|
-
{
|
|
169
|
-
Name: 'PostID',
|
|
170
|
-
Type: 'Input',
|
|
171
|
-
Value: null,
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
Name: 'AuthorType',
|
|
175
|
-
Type: 'Input',
|
|
176
|
-
Value: 'organization', // 'personal' or 'organization'
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
Name: 'OrganizationID',
|
|
180
|
-
Type: 'Input',
|
|
181
|
-
Value: null,
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
Name: 'TimeRange',
|
|
185
|
-
Type: 'Input',
|
|
186
|
-
Value: null, // Optional: {start: Date, end: Date}
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
Name: 'Analytics',
|
|
190
|
-
Type: 'Output',
|
|
191
|
-
Value: null,
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
Name: 'RawAnalytics',
|
|
195
|
-
Type: 'Output',
|
|
196
|
-
Value: null,
|
|
197
|
-
},
|
|
198
|
-
];
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Get action description
|
|
203
|
-
*/
|
|
204
|
-
public get Description(): string {
|
|
205
|
-
return 'Retrieves detailed analytics for a LinkedIn post (organization posts have more detailed analytics than personal posts)';
|
|
206
|
-
}
|
|
207
|
-
}
|
|
206
|
+
}
|