upload-post 2.3.0__tar.gz → 2.5.0__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: upload-post
3
- Version: 2.3.0
3
+ Version: 2.5.0
4
4
  Summary: Cross-platform social media upload for TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, and X (Twitter)
5
5
  Home-page: https://www.upload-post.com/
6
6
  Author: Upload-Post
@@ -40,7 +40,7 @@ Dynamic: summary
40
40
 
41
41
  Official Python client for the [Upload-Post API](https://www.upload-post.com) - Cross-platform social media upload.
42
42
 
43
- Upload videos, photos, text posts, and documents to **TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, and X (Twitter)** with a single API.
43
+ Upload videos, photos, text posts, and documents to **TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, X (Twitter), Slack, Mastodon, Nostr, Lemmy, Dev.to, Hashnode, WordPress, Whop, and Listmonk** with a single API.
44
44
 
45
45
  ## Installation
46
46
 
@@ -68,9 +68,9 @@ print(response)
68
68
 
69
69
  ## Features
70
70
 
71
- - ✅ **Video Upload** - TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Bluesky, Discord, Telegram, X
72
- - ✅ **Photo Upload** - TikTok, Instagram, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, X
73
- - ✅ **Text Posts** - X, LinkedIn, Facebook, Threads, Reddit, Bluesky, Discord, Telegram
71
+ - ✅ **Video Upload** - TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Bluesky, Discord, Telegram, X, Mastodon, WordPress
72
+ - ✅ **Photo Upload** - TikTok, Instagram, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, X, Mastodon, Lemmy, WordPress
73
+ - ✅ **Text Posts** - X, LinkedIn, Facebook, Threads, Reddit, Bluesky, Discord, Telegram, Slack, Mastodon, Nostr, Lemmy, Dev.to, Hashnode, WordPress, Whop, Listmonk
74
74
  - ✅ **Document Upload** - LinkedIn (PDF, PPT, PPTX, DOC, DOCX)
75
75
  - ✅ **Scheduling** - Schedule posts for later
76
76
  - ✅ **Posting Queue** - Add posts to your configured queue
@@ -2,7 +2,7 @@
2
2
 
3
3
  Official Python client for the [Upload-Post API](https://www.upload-post.com) - Cross-platform social media upload.
4
4
 
5
- Upload videos, photos, text posts, and documents to **TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, and X (Twitter)** with a single API.
5
+ Upload videos, photos, text posts, and documents to **TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, X (Twitter), Slack, Mastodon, Nostr, Lemmy, Dev.to, Hashnode, WordPress, Whop, and Listmonk** with a single API.
6
6
 
7
7
  ## Installation
8
8
 
@@ -30,9 +30,9 @@ print(response)
30
30
 
31
31
  ## Features
32
32
 
33
- - ✅ **Video Upload** - TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Bluesky, Discord, Telegram, X
34
- - ✅ **Photo Upload** - TikTok, Instagram, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, X
35
- - ✅ **Text Posts** - X, LinkedIn, Facebook, Threads, Reddit, Bluesky, Discord, Telegram
33
+ - ✅ **Video Upload** - TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Bluesky, Discord, Telegram, X, Mastodon, WordPress
34
+ - ✅ **Photo Upload** - TikTok, Instagram, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, X, Mastodon, Lemmy, WordPress
35
+ - ✅ **Text Posts** - X, LinkedIn, Facebook, Threads, Reddit, Bluesky, Discord, Telegram, Slack, Mastodon, Nostr, Lemmy, Dev.to, Hashnode, WordPress, Whop, Listmonk
36
36
  - ✅ **Document Upload** - LinkedIn (PDF, PPT, PPTX, DOC, DOCX)
37
37
  - ✅ **Scheduling** - Schedule posts for later
38
38
  - ✅ **Posting Queue** - Add posts to your configured queue
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
5
5
 
6
6
  setup(
7
7
  name="upload-post",
8
- version="2.3.0",
8
+ version="2.5.0",
9
9
  author="Upload-Post",
10
10
  author_email="hi@img2html.com",
11
11
  description="Cross-platform social media upload for TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, and X (Twitter)",
@@ -15,7 +15,7 @@ Example:
15
15
  ... )
16
16
  """
17
17
 
18
- __version__ = "2.3.0"
18
+ __version__ = "2.5.0"
19
19
 
20
20
  from .api_client import UploadPostClient, UploadPostError
21
21
 
@@ -141,7 +141,10 @@ class UploadPostClient:
141
141
  # Platform-specific title overrides
142
142
  title_overrides = [
143
143
  "bluesky_title", "instagram_title", "facebook_title", "tiktok_title",
144
- "linkedin_title", "x_title", "youtube_title", "pinterest_title", "threads_title"
144
+ "linkedin_title", "x_title", "youtube_title", "pinterest_title", "threads_title",
145
+ # New credential-based platforms
146
+ "slack_title", "mastodon_title", "nostr_title", "lemmy_title", "devto_title",
147
+ "hashnode_title", "wordpress_title", "whop_title", "listmonk_title"
145
148
  ]
146
149
  for key in title_overrides:
147
150
  if kwargs.get(key):
@@ -407,7 +410,8 @@ class UploadPostClient:
407
410
  Optional for TikTok, Instagram, Facebook, LinkedIn, X, Threads, Bluesky, Discord, Telegram, Pinterest.
408
411
  user: User identifier (profile name).
409
412
  platforms: Target platforms. Supported: tiktok, instagram, youtube,
410
- linkedin, facebook, pinterest, threads, bluesky, discord, telegram, x
413
+ linkedin, facebook, pinterest, threads, bluesky, discord, telegram, x,
414
+ mastodon, wordpress
411
415
 
412
416
  Keyword Args:
413
417
  description: Video description
@@ -557,7 +561,8 @@ class UploadPostClient:
557
561
  Optional for TikTok, Instagram, Facebook, LinkedIn, X, Threads, Bluesky, Discord, Telegram, Pinterest.
558
562
  user: User identifier (profile name).
559
563
  platforms: Target platforms. Supported: tiktok, instagram, linkedin,
560
- facebook, pinterest, threads, reddit, bluesky, discord, telegram, x
564
+ facebook, pinterest, threads, reddit, bluesky, discord, telegram, x,
565
+ mastodon, lemmy, wordpress
561
566
 
562
567
  Keyword Args:
563
568
  description: Photo description
@@ -691,7 +696,8 @@ class UploadPostClient:
691
696
  title: Text content for the post.
692
697
  user: User identifier (profile name).
693
698
  platforms: Target platforms. Supported: x, linkedin, facebook,
694
- threads, reddit, bluesky, discord, telegram
699
+ threads, reddit, bluesky, discord, telegram, slack, mastodon,
700
+ nostr, lemmy, devto, hashnode, wordpress, whop, listmonk
695
701
 
696
702
  Keyword Args:
697
703
  first_comment: First comment to post
@@ -898,6 +904,53 @@ class UploadPostClient:
898
904
  """
899
905
  return self._request("/uploadposts/history", "GET", params={"page": page, "limit": limit})
900
906
 
907
+ def retry_post(
908
+ self,
909
+ request_id: Optional[str] = None,
910
+ job_id: Optional[str] = None
911
+ ) -> Dict:
912
+ """
913
+ Retry a failed post.
914
+
915
+ Args:
916
+ request_id: Request ID of the post to retry.
917
+ job_id: Job ID of the post to retry.
918
+
919
+ One of request_id or job_id is required.
920
+
921
+ Returns:
922
+ Retry result.
923
+ """
924
+ json_data = {}
925
+ if request_id is not None:
926
+ json_data["request_id"] = request_id
927
+ if job_id is not None:
928
+ json_data["job_id"] = job_id
929
+ return self._request("/uploadposts/posts/retry", "POST", json_data=json_data)
930
+
931
+ def unpublish_post(
932
+ self,
933
+ user: str,
934
+ platform: str,
935
+ post_id: str
936
+ ) -> Dict:
937
+ """
938
+ Unpublish (delete) a previously published post.
939
+
940
+ Args:
941
+ user: Profile username.
942
+ platform: Platform name (facebook, youtube, x, linkedin, threads).
943
+ post_id: ID of the published post to unpublish.
944
+
945
+ Returns:
946
+ Unpublish result.
947
+ """
948
+ return self._request("/uploadposts/posts/unpublish", "POST", json_data={
949
+ "user": user,
950
+ "platform": platform,
951
+ "post_id": post_id
952
+ })
953
+
901
954
  def get_analytics(self, profile_username: str, platforms: Optional[List[str]] = None,
902
955
  page_id: Optional[str] = None, page_urn: Optional[str] = None) -> Dict:
903
956
  """
@@ -907,7 +960,10 @@ class UploadPostClient:
907
960
  profile_username: Profile username.
908
961
  platforms: Filter by platforms (instagram, linkedin, facebook, x, youtube, tiktok, threads, pinterest, reddit).
909
962
  page_id: Facebook Page ID (required for Facebook analytics).
910
- page_urn: LinkedIn page URN (defaults to "me" for personal profile).
963
+ page_urn: LinkedIn organization/company page URN or numeric ID. LinkedIn
964
+ analytics are only available for pages you administer; personal profiles
965
+ are not supported (LinkedIn's API exposes no member-level analytics). If
966
+ omitted, the first administered organization page is used.
911
967
 
912
968
  Returns:
913
969
  Analytics data per platform. For Instagram, the response includes both
@@ -1285,32 +1341,43 @@ class UploadPostClient:
1285
1341
  def get_post_comments(
1286
1342
  self,
1287
1343
  user: str,
1344
+ platform: str = "instagram",
1288
1345
  post_id: Optional[str] = None,
1289
- post_url: Optional[str] = None
1346
+ post_url: Optional[str] = None,
1347
+ limit: Optional[int] = None,
1348
+ after: Optional[str] = None
1290
1349
  ) -> Dict:
1291
1350
  """
1292
- Get comments on an Instagram post.
1351
+ Get comments on a post.
1293
1352
 
1294
1353
  Args:
1295
1354
  user: Profile username.
1296
- post_id: Numeric media ID (provide post_id or post_url).
1297
- post_url: Full Instagram post URL (provide post_id or post_url).
1355
+ platform: Platform name (instagram, facebook, youtube, linkedin).
1356
+ post_id: Post/media ID (provide post_id or post_url).
1357
+ post_url: Full post URL (provide post_id or post_url).
1358
+ limit: Maximum number of comments to return.
1359
+ after: Pagination cursor for the next page of comments.
1298
1360
 
1299
1361
  Returns:
1300
1362
  Comments data including comment IDs, text, timestamps, and user info.
1301
1363
  """
1302
- params = {"platform": "instagram", "user": user}
1364
+ params = {"platform": platform, "user": user}
1303
1365
  if post_id:
1304
1366
  params["post_id"] = post_id
1305
1367
  if post_url:
1306
1368
  params["post_url"] = post_url
1369
+ if limit is not None:
1370
+ params["limit"] = limit
1371
+ if after is not None:
1372
+ params["after"] = after
1307
1373
  return self._request("/uploadposts/comments", "GET", params=params)
1308
1374
 
1309
1375
  def reply_to_comment(
1310
1376
  self,
1311
1377
  user: str,
1312
1378
  comment_id: str,
1313
- message: str
1379
+ message: str,
1380
+ buttons: Optional[List[Dict]] = None
1314
1381
  ) -> Dict:
1315
1382
  """
1316
1383
  Send a private reply (DM) to the author of an Instagram comment.
@@ -1319,16 +1386,21 @@ class UploadPostClient:
1319
1386
  user: Profile username.
1320
1387
  comment_id: Comment ID from get_post_comments.
1321
1388
  message: Reply message text.
1389
+ buttons: Optional list of web_url buttons (max 3) rendered in the Instagram
1390
+ DM. Each item is a dict like {"title": "Open", "url": "https://..."}.
1322
1391
 
1323
1392
  Returns:
1324
1393
  Reply result with recipient_id and message_id.
1325
1394
  """
1326
- return self._request("/uploadposts/comments/reply", "POST", json_data={
1395
+ json_data = {
1327
1396
  "platform": "instagram",
1328
1397
  "user": user,
1329
1398
  "comment_id": comment_id,
1330
1399
  "message": message
1331
- })
1400
+ }
1401
+ if buttons is not None:
1402
+ json_data["buttons"] = buttons
1403
+ return self._request("/uploadposts/comments/reply", "POST", json_data=json_data)
1332
1404
 
1333
1405
  def public_reply_to_comment(
1334
1406
  self,
@@ -1354,6 +1426,72 @@ class UploadPostClient:
1354
1426
  "message": message
1355
1427
  })
1356
1428
 
1429
+ def create_comment(
1430
+ self,
1431
+ user: str,
1432
+ platform: str,
1433
+ message: str,
1434
+ post_id: Optional[str] = None,
1435
+ post_url: Optional[str] = None,
1436
+ comment_id: Optional[str] = None
1437
+ ) -> Dict:
1438
+ """
1439
+ Create a comment on a post, or reply to an existing comment.
1440
+
1441
+ Args:
1442
+ user: Profile username.
1443
+ platform: Platform name (instagram, facebook, youtube, linkedin).
1444
+ message: Comment text.
1445
+ post_id: Post/media ID to comment on.
1446
+ post_url: Full post URL to comment on.
1447
+ comment_id: Existing comment ID to reply to.
1448
+
1449
+ One of post_id, post_url or comment_id is required.
1450
+
1451
+ Returns:
1452
+ Creation result with the new comment ID.
1453
+ """
1454
+ json_data = {
1455
+ "platform": platform,
1456
+ "user": user,
1457
+ "message": message
1458
+ }
1459
+ if post_id is not None:
1460
+ json_data["post_id"] = post_id
1461
+ if post_url is not None:
1462
+ json_data["post_url"] = post_url
1463
+ if comment_id is not None:
1464
+ json_data["comment_id"] = comment_id
1465
+ return self._request("/uploadposts/comments/create", "POST", json_data=json_data)
1466
+
1467
+ def delete_comment(
1468
+ self,
1469
+ user: str,
1470
+ platform: str,
1471
+ comment_id: str,
1472
+ post_id: Optional[str] = None
1473
+ ) -> Dict:
1474
+ """
1475
+ Delete a comment on a post.
1476
+
1477
+ Args:
1478
+ user: Profile username.
1479
+ platform: Platform name (instagram, facebook, youtube, linkedin).
1480
+ comment_id: Comment ID to delete.
1481
+ post_id: Post URN (required for LinkedIn).
1482
+
1483
+ Returns:
1484
+ Deletion result.
1485
+ """
1486
+ json_data = {
1487
+ "platform": platform,
1488
+ "user": user,
1489
+ "comment_id": comment_id
1490
+ }
1491
+ if post_id is not None:
1492
+ json_data["post_id"] = post_id
1493
+ return self._request("/uploadposts/comments/delete", "DELETE", json_data=json_data)
1494
+
1357
1495
  # ==================== Google Business ====================
1358
1496
 
1359
1497
  def get_google_business_locations(self, profile: Optional[str] = None) -> Dict:
@@ -18,7 +18,7 @@ def main():
18
18
  "--platforms",
19
19
  nargs="+",
20
20
  required=True,
21
- choices=["tiktok", "instagram", "linkedin", "youtube", "facebook", "x", "threads", "pinterest", "discord", "telegram"],
21
+ choices=["tiktok", "instagram", "linkedin", "youtube", "facebook", "x", "threads", "pinterest", "bluesky", "discord", "telegram", "mastodon", "wordpress"],
22
22
  help="Platforms to upload to. For platform-specific parameters, please use the Python API."
23
23
  )
24
24
  parser.add_argument(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: upload-post
3
- Version: 2.3.0
3
+ Version: 2.5.0
4
4
  Summary: Cross-platform social media upload for TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, and X (Twitter)
5
5
  Home-page: https://www.upload-post.com/
6
6
  Author: Upload-Post
@@ -40,7 +40,7 @@ Dynamic: summary
40
40
 
41
41
  Official Python client for the [Upload-Post API](https://www.upload-post.com) - Cross-platform social media upload.
42
42
 
43
- Upload videos, photos, text posts, and documents to **TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, and X (Twitter)** with a single API.
43
+ Upload videos, photos, text posts, and documents to **TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, X (Twitter), Slack, Mastodon, Nostr, Lemmy, Dev.to, Hashnode, WordPress, Whop, and Listmonk** with a single API.
44
44
 
45
45
  ## Installation
46
46
 
@@ -68,9 +68,9 @@ print(response)
68
68
 
69
69
  ## Features
70
70
 
71
- - ✅ **Video Upload** - TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Bluesky, Discord, Telegram, X
72
- - ✅ **Photo Upload** - TikTok, Instagram, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, X
73
- - ✅ **Text Posts** - X, LinkedIn, Facebook, Threads, Reddit, Bluesky, Discord, Telegram
71
+ - ✅ **Video Upload** - TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Bluesky, Discord, Telegram, X, Mastodon, WordPress
72
+ - ✅ **Photo Upload** - TikTok, Instagram, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, Discord, Telegram, X, Mastodon, Lemmy, WordPress
73
+ - ✅ **Text Posts** - X, LinkedIn, Facebook, Threads, Reddit, Bluesky, Discord, Telegram, Slack, Mastodon, Nostr, Lemmy, Dev.to, Hashnode, WordPress, Whop, Listmonk
74
74
  - ✅ **Document Upload** - LinkedIn (PDF, PPT, PPTX, DOC, DOCX)
75
75
  - ✅ **Scheduling** - Schedule posts for later
76
76
  - ✅ **Posting Queue** - Add posts to your configured queue
File without changes