warp-beacon 2.8.1__tar.gz → 2.8.3__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.
Files changed (74) hide show
  1. {warp_beacon-2.8.1/warp_beacon.egg-info → warp_beacon-2.8.3}/PKG-INFO +1 -1
  2. warp_beacon-2.8.3/warp_beacon/__version__.py +2 -0
  3. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scheduler/instagram_human.py +2 -2
  4. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/X/X.py +32 -13
  5. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/X/abstract.py +1 -1
  6. {warp_beacon-2.8.1 → warp_beacon-2.8.3/warp_beacon.egg-info}/PKG-INFO +1 -1
  7. warp_beacon-2.8.1/warp_beacon/__version__.py +0 -2
  8. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/LICENSE +0 -0
  9. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/MANIFEST.in +0 -0
  10. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/README.md +0 -0
  11. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/assets/cc-group-black.png +0 -0
  12. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/assets/placeholder.gif +0 -0
  13. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/etc/.gitignore +0 -0
  14. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/etc/accounts.json +0 -0
  15. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/etc/proxies.json +0 -0
  16. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/etc/warp_beacon.conf +0 -0
  17. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/etc/warp_beacon.service +0 -0
  18. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/pyproject.toml +0 -0
  19. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/setup.cfg +0 -0
  20. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/setup.py +0 -0
  21. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/__init__.py +0 -0
  22. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/compress/__init__.py +0 -0
  23. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/compress/video.py +0 -0
  24. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/jobs/__init__.py +0 -0
  25. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/jobs/abstract.py +0 -0
  26. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/jobs/download_job.py +0 -0
  27. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/jobs/types.py +0 -0
  28. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/jobs/upload_job.py +0 -0
  29. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/mediainfo/__init__.py +0 -0
  30. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/mediainfo/abstract.py +0 -0
  31. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/mediainfo/audio.py +0 -0
  32. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/mediainfo/silencer.py +0 -0
  33. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/mediainfo/video.py +0 -0
  34. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scheduler/__init__.py +0 -0
  35. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scheduler/scheduler.py +0 -0
  36. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/X/__init__.py +0 -0
  37. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/X/types.py +0 -0
  38. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/__init__.py +0 -0
  39. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/abstract.py +0 -0
  40. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/account_selector.py +0 -0
  41. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/exceptions.py +0 -0
  42. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/fail_handler.py +0 -0
  43. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/instagram/__init__.py +0 -0
  44. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/instagram/captcha.py +0 -0
  45. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/instagram/instagram.py +0 -0
  46. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/instagram/wb_instagrapi.py +0 -0
  47. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/link_resolver.py +0 -0
  48. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/utils.py +0 -0
  49. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/youtube/__init__.py +0 -0
  50. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/youtube/abstract.py +0 -0
  51. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/youtube/music.py +0 -0
  52. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/youtube/shorts.py +0 -0
  53. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/scraper/youtube/youtube.py +0 -0
  54. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/storage/__init__.py +0 -0
  55. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/storage/mongo.py +0 -0
  56. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/__init__.py +0 -0
  57. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/bot.py +0 -0
  58. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/caption_shortener.py +0 -0
  59. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/download_status.py +0 -0
  60. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/edit_message.py +0 -0
  61. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/handlers.py +0 -0
  62. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/placeholder_message.py +0 -0
  63. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/progress_bar.py +0 -0
  64. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/progress_file_reader.py +0 -0
  65. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/types.py +0 -0
  66. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/telegram/utils.py +0 -0
  67. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/uploader/__init__.py +0 -0
  68. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/warp_beacon.py +0 -0
  69. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon/yt_auth.py +0 -0
  70. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon.egg-info/SOURCES.txt +0 -0
  71. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon.egg-info/dependency_links.txt +0 -0
  72. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon.egg-info/entry_points.txt +0 -0
  73. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon.egg-info/requires.txt +0 -0
  74. {warp_beacon-2.8.1 → warp_beacon-2.8.3}/warp_beacon.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warp_beacon
3
- Version: 2.8.1
3
+ Version: 2.8.3
4
4
  Summary: Telegram bot for expanding external media links
5
5
  Home-page: https://github.com/sb0y/warp_beacon
6
6
  Author: Andrey Bagrintsev
@@ -0,0 +1,2 @@
1
+ __version__ = "2.8.3"
2
+
@@ -151,7 +151,7 @@ class InstagramHuman(object):
151
151
 
152
152
  def scroll_content(self, last_pk: int) -> None:
153
153
  #timeline_initialized = False
154
- if random.random() > 0.5:
154
+ if random.random() > 0.95:
155
155
  #timeline_initialized = True
156
156
  #self.browse_timeline()
157
157
  logging.info("Starting to watch related reels with media_pk '%d'", last_pk)
@@ -159,7 +159,7 @@ class InstagramHuman(object):
159
159
  self.operations_count += 1
160
160
  self.watch_content(media)
161
161
 
162
- if random.random() > 0.7:
162
+ if random.random() > 0.95:
163
163
  time.sleep(random.uniform(2, 20))
164
164
  #if not timeline_initialized:
165
165
  # self.browse_timeline()
@@ -7,6 +7,7 @@ import requests
7
7
  import yt_dlp
8
8
  from playwright.sync_api import sync_playwright
9
9
 
10
+ from warp_beacon.telegram.utils import Utils
10
11
  from warp_beacon.scraper.utils import ScraperUtils
11
12
  from warp_beacon.scraper.X.types import XMediaType
12
13
  from warp_beacon.jobs.types import JobType
@@ -77,27 +78,45 @@ class XScraper(XAbstract):
77
78
  job_type = JobType.VIDEO
78
79
  except yt_dlp.utils.DownloadError as e:
79
80
  msg = str(e).lower()
80
- if "No video could be found in this tweet" in msg:
81
+ if "no video could be found in this tweet" in msg:
81
82
  logging.warning("[X] yt_dlp failed to extract info. Falling back to image scraping.")
82
83
  media_type = XMediaType.IMAGE
83
84
  else:
84
85
  raise
85
-
86
+
87
+ images = []
86
88
  if media_type == XMediaType.IMAGE:
87
89
  job_type = JobType.IMAGE
88
90
  images, post_text = self.download_images(url, timeout)
89
91
  if images:
90
- local_file = images[0]
91
-
92
- if local_file:
92
+ if len(images) > 1:
93
+ job_type = JobType.COLLECTION
94
+ else:
95
+ local_file = images[0]
96
+
97
+ if job_type == JobType.COLLECTION:
98
+ chunks = []
99
+ for media_chunk in Utils.chunker(images, 10):
100
+ chunk = []
101
+ for media in media_chunk:
102
+ chunk.append({
103
+ "local_media_path": media,
104
+ "canonical_name": post_text,
105
+ "media_type": JobType.IMAGE
106
+ })
107
+ chunks.append(chunk)
93
108
  res.append({
94
- "local_media_path": local_file,
95
- "performer": media_info.get("uploader", "Unknown"),
96
- 'progress_hooks': [self.dlp_on_progress],
97
- #"thumb": thumbnail,
98
- "canonical_name": post_text,
99
- "media_type": job_type
109
+ "media_type": JobType.COLLECTION,
110
+ "items": chunks
100
111
  })
112
+ else:
113
+ if local_file:
114
+ res.append({
115
+ "local_media_path": local_file,
116
+ "performer": media_info.get("uploader", "Unknown"),
117
+ "canonical_name": post_text,
118
+ "media_type": job_type
119
+ })
101
120
 
102
121
  return res
103
122
 
@@ -198,13 +217,13 @@ class XScraper(XAbstract):
198
217
 
199
218
  with sync_playwright() as p:
200
219
  with p.chromium.launch(headless=True) as browser:
201
- with browser.new_context(proxy=proxy, ignore_https_errors=True) as context:
220
+ with browser.new_context(proxy=proxy) as context:
202
221
  page = context.new_page()
203
222
  page.goto(url, wait_until="networkidle", timeout=(timeout*1000))
204
223
 
205
224
  #page.wait_for_timeout(3000)
206
225
  page.wait_for_selector("img[src*='pbs.twimg.com/media']", timeout=(timeout*1000))
207
- text_element = page.wait_for_selector('[data-testid="tweetText"]', timeout=(timeout*1000))
226
+ text_element = page.query_selector('[data-testid="tweetText"]')
208
227
  text = text_element.inner_text()
209
228
 
210
229
  image_elements = page.query_selector_all("img")
@@ -24,7 +24,7 @@ from warp_beacon.telegram.types import ReportType
24
24
 
25
25
  class XAbstract(ScraperAbstract):
26
26
  DOWNLOAD_DIR = "/tmp"
27
- X_MAX_RETRIES_DEFAULT = 8
27
+ X_MAX_RETRIES_DEFAULT = 2
28
28
  X_PAUSE_BEFORE_RETRY_DEFAULT = 3
29
29
  X_TIMEOUT_DEFAULT = 15
30
30
  X_TIMEOUT_INCREMENT_DEFAULT = 20
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warp_beacon
3
- Version: 2.8.1
3
+ Version: 2.8.3
4
4
  Summary: Telegram bot for expanding external media links
5
5
  Home-page: https://github.com/sb0y/warp_beacon
6
6
  Author: Andrey Bagrintsev
@@ -1,2 +0,0 @@
1
- __version__ = "2.8.1"
2
-
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes