@danhachuel/thunderbolt 0.6.25 → 0.6.26

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.
@@ -42,6 +42,12 @@ def _metric_input(value: Any) -> int | None:
42
42
  return normalize_instagram_metric(value)
43
43
 
44
44
 
45
+ def _render_instagram_bio(value: Any) -> None:
46
+ bio = normalize_instagram_bio(value)
47
+ if bio:
48
+ st.markdown(bio.replace("\n", " \n"))
49
+
50
+
45
51
  def _language_index(value: Any) -> int:
46
52
  code = language_code(value)
47
53
  return list(LANGUAGE_CODES).index(code) if code in LANGUAGE_CODES else list(LANGUAGE_CODES).index("pt")
@@ -326,9 +332,7 @@ def _render_instagram_card(profile: dict[str, Any], characters: list[dict[str, A
326
332
  with header_cols[1]:
327
333
  st.write(f"**{_clean(profile.get('name')) or 'Sem nome'}**")
328
334
  st.caption(f"{_clean(profile.get('handle')) or _clean(profile.get('url')) or 'sem handler'}")
329
- bio = normalize_instagram_bio(profile.get("bio"))
330
- if bio:
331
- st.caption(f"Bio: {bio}")
335
+ _render_instagram_bio(profile.get("bio"))
332
336
  st.caption(f"{_clean(profile.get('country')) or 'País não definido'} · {_clean(profile.get('language')) or 'Idioma não definido'}")
333
337
  with header_cols[2]:
334
338
  st.metric("posts", _metric(profile.get("post_count")))
@@ -447,9 +451,7 @@ def render_social_networks(settings: dict[str, Any]) -> None:
447
451
  with preview_cols[1]:
448
452
  st.write(f"**{_clean(data.get('name')) or _clean(data.get('username'))}**")
449
453
  st.caption(_clean(data.get("handle")))
450
- bio = normalize_instagram_bio(data.get("bio"))
451
- if bio:
452
- st.caption(f"Bio: {bio}")
454
+ _render_instagram_bio(data.get("bio"))
453
455
  with preview_cols[2]:
454
456
  st.metric("posts", _metric(data.get("post_count")))
455
457
  with preview_cols[3]:
@@ -156,6 +156,7 @@ def _profile_data_from_api(user: Mapping[str, Any], reference: Mapping[str, str]
156
156
  'subscriber_count': followers,
157
157
  'following_count': following,
158
158
  'post_count': media,
159
+ 'is_private': bool(user.get('is_private')),
159
160
  'public_lookup': True,
160
161
  'metrics_source': 'instagram_web_profile_info',
161
162
  'last_public_lookup_at': datetime.now(timezone.utc).isoformat(),
@@ -289,6 +290,8 @@ def fetch_public_instagram_posts(source: str, limit: int = 10) -> IntegrationRes
289
290
  api_posts.append(post)
290
291
  if api_posts:
291
292
  return IntegrationResult(True, 'Posts públicos encontrados.', reference | {'posts': api_posts[:max(1, int(limit))]})
293
+ if api_user.get('is_private'):
294
+ return IntegrationResult(False, 'Esta conta é privada. O Instagram não disponibiliza posts sem uma sessão autenticada.', reference | {'posts': [], 'is_private': True})
292
295
  try:
293
296
  response = requests.get(reference['url'], headers={'User-Agent': 'Mozilla/5.0', 'Accept-Language': 'pt-BR,pt;q=0.9,en;q=0.8'}, timeout=15)
294
297
  except requests.RequestException as exc:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danhachuel/thunderbolt",
3
- "version": "0.6.25",
3
+ "version": "0.6.26",
4
4
  "description": "Thunderbolt — interface local para operação de canais faceless e motor MoneyPrinterTurbo",
5
5
  "license": "MIT",
6
6
  "main": "scripts/cli.mjs",