habulaj commited on
Commit
49b0506
·
verified ·
1 Parent(s): 9ee9c50

Update gemini_client/core.py

Browse files
Files changed (1) hide show
  1. gemini_client/core.py +76 -114
gemini_client/core.py CHANGED
@@ -346,30 +346,39 @@ class AsyncChatbot:
346
  snlm0e_match = re.search(r'''["']SNlM0e["']\s*:\s*["'](.*?)["']''', resp.text)
347
  if not snlm0e_match:
348
  # Se não encontrou SNlM0e, pode ser cookie expirado - tentar atualizar
349
- console.log("[yellow]SNlM0e não encontrado na resposta. Possível cookie expirado. Tentando atualizar cookie...[/yellow]")
350
  try:
351
- await self.__rotate_cookies()
352
- # Retentar buscar SNlM0e após atualizar cookie
353
- resp = await self.session.get(
354
- Endpoint.INIT.value,
355
- timeout=self.timeout
356
- )
357
- resp.raise_for_status()
358
 
359
- if "Sign in to continue" in resp.text or "accounts.google.com" in str(resp.url):
360
- raise PermissionError("Authentication failed. Cookies might be invalid or expired. Please update them.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
 
362
- snlm0e_match = re.search(r'''["']SNlM0e["']\s*:\s*["'](.*?)["']''', resp.text)
363
- if snlm0e_match:
364
- console.log("[green]✓ SNlM0e obtido com sucesso após atualização do cookie![/green]")
365
- return snlm0e_match.group(1)
366
  else:
367
- error_message = "SNlM0e value not found in response after cookie update."
368
- if resp.status_code == 429:
369
- error_message += " Rate limit likely exceeded."
370
- else:
371
- error_message += f" Response status: {resp.status_code}. Check cookie validity and network."
372
- raise ValueError(error_message)
373
  except ValueError as rotate_error:
374
  # Re-raise ValueError (já tem mensagem clara sobre atualização manual)
375
  raise
@@ -434,24 +443,55 @@ class AsyncChatbot:
434
  """
435
  Rotates the __Secure-1PSIDTS cookie and saves it automatically.
436
  Returns the new cookie value if successful.
 
437
  """
438
  try:
439
  console.log("[yellow]Atualizando cookie __Secure-1PSIDTS automaticamente...[/yellow]")
440
 
441
- # Tentar método 1: Endpoint de rotação direto
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
  try:
443
  response = await self.session.post(
444
  Endpoint.ROTATE_COOKIES.value,
445
  headers={
446
  "Content-Type": "application/json",
447
  "Origin": "https://accounts.google.com",
448
- "Referer": "https://accounts.google.com/"
 
449
  },
450
  json=[0, "-0000000000000000000"],
451
  timeout=self.timeout
452
  )
453
 
454
- # Se retornou 200, verificar se tem novo cookie
455
  if response.status_code == 200:
456
  new_1psidts = response.cookies.get("__Secure-1PSIDTS")
457
  if new_1psidts:
@@ -466,107 +506,29 @@ class AsyncChatbot:
466
  self.secure_1psidts,
467
  self.additional_cookies
468
  )
469
- console.log("[green]✓ Cookie atualizado e salvo automaticamente![/green]")
470
  except Exception as save_error:
471
  console.log(f"[yellow]Aviso: Cookie atualizado mas não foi possível salvar: {save_error}[/yellow]")
472
 
473
  return new_1psidts
474
 
475
- # Se não funcionou, tentar método alternativo: acessar Gemini para obter novo cookie
476
- if response.status_code in (401, 403, 404):
477
- console.log("[yellow]Endpoint de rotação não disponível, tentando método alternativo...[/yellow]")
478
- # Acessar a página do Gemini para obter novos cookies
479
- init_response = await self.session.get(
480
- Endpoint.INIT.value,
481
- timeout=self.timeout
482
- )
483
-
484
- # Verificar se obteve novo cookie na resposta
485
- new_1psidts = init_response.cookies.get("__Secure-1PSIDTS")
486
- if new_1psidts and new_1psidts != self.secure_1psidts:
487
- self.secure_1psidts = new_1psidts
488
- self.session.cookies.set("__Secure-1PSIDTS", new_1psidts)
489
-
490
- if self.cookie_path:
491
- try:
492
- save_cookies(
493
- self.cookie_path,
494
- self.secure_1psid,
495
- self.secure_1psidts,
496
- self.additional_cookies
497
- )
498
- console.log("[green]✓ Cookie atualizado via método alternativo![/green]")
499
- except Exception as save_error:
500
- console.log(f"[yellow]Aviso: Cookie atualizado mas não foi possível salvar: {save_error}[/yellow]")
501
-
502
- return new_1psidts
503
- else:
504
- raise ValueError("Não foi possível obter novo cookie - cookies podem estar completamente expirados")
505
-
506
- response.raise_for_status()
507
 
508
  except Exception as rotate_error:
509
- # Se falhou, tentar método alternativo apenas se não for 401/403/404
510
- error_str = str(rotate_error).lower()
511
- if "401" in error_str or "403" in error_str or "404" in error_str:
512
- # Se for erro de autenticação, cookies estão completamente expirados
513
- raise ValueError(
514
- "Cookies completamente expirados. Não é possível atualizar automaticamente. "
515
- "Por favor, acesse https://gemini.google.com/app e copie os novos cookies "
516
- "__Secure-1PSID e __Secure-1PSIDTS manualmente."
517
- )
518
-
519
- # Tentar método alternativo apenas para outros erros
520
- console.log(f"[yellow]Método de rotação falhou ({rotate_error}), tentando método alternativo...[/yellow]")
521
- try:
522
- # Acessar a página do Gemini para obter novos cookies
523
- init_response = await self.session.get(
524
- Endpoint.INIT.value,
525
- timeout=self.timeout
526
- )
527
-
528
- new_1psidts = init_response.cookies.get("__Secure-1PSIDTS")
529
- if new_1psidts and new_1psidts != self.secure_1psidts:
530
- self.secure_1psidts = new_1psidts
531
- self.session.cookies.set("__Secure-1PSIDTS", new_1psidts)
532
-
533
- if self.cookie_path:
534
- try:
535
- save_cookies(
536
- self.cookie_path,
537
- self.secure_1psid,
538
- self.secure_1psidts,
539
- self.additional_cookies
540
- )
541
- console.log("[green]✓ Cookie atualizado via método alternativo![/green]")
542
- except Exception as save_error:
543
- console.log(f"[yellow]Aviso: Cookie atualizado mas não foi possível salvar: {save_error}[/yellow]")
544
-
545
- return new_1psidts
546
- else:
547
- raise ValueError(
548
- "Não foi possível obter novo cookie. Cookies podem estar completamente expirados. "
549
- "Por favor, acesse https://gemini.google.com/app e copie os novos cookies manualmente."
550
- )
551
- except Exception as alt_error:
552
- console.log(f"[red]Método alternativo também falhou: {alt_error}[/red]")
553
- raise ValueError(
554
- f"Não foi possível atualizar cookie automaticamente. "
555
- f"Por favor, acesse https://gemini.google.com/app e copie os novos cookies "
556
- f"__Secure-1PSID e __Secure-1PSIDTS manualmente. Erro: {rotate_error}"
557
- )
558
 
559
- raise ValueError("Novo cookie __Secure-1PSIDTS não encontrado na resposta")
560
- except ValueError:
561
- # Re-raise ValueError sem modificar (já tem mensagem clara)
562
- raise
563
  except Exception as e:
564
  console.log(f"[red]Falha ao atualizar cookie: {e}[/red]")
565
- raise ValueError(
566
- f"Não foi possível atualizar cookie automaticamente. "
567
- f"Por favor, acesse https://gemini.google.com/app e copie os novos cookies "
568
- f"__Secure-1PSID e __Secure-1PSIDTS manualmente. Erro: {e}"
569
- )
570
 
571
 
572
  async def ask(
 
346
  snlm0e_match = re.search(r'''["']SNlM0e["']\s*:\s*["'](.*?)["']''', resp.text)
347
  if not snlm0e_match:
348
  # Se não encontrou SNlM0e, pode ser cookie expirado - tentar atualizar
349
+ console.log("[yellow]SNlM0e não encontrado na resposta. Tentando atualizar cookie...[/yellow]")
350
  try:
351
+ # Tentar atualizar cookie
352
+ new_cookie = await self.__rotate_cookies()
 
 
 
 
 
353
 
354
+ # Se obteve novo cookie, atualizar na sessão e tentar novamente
355
+ if new_cookie and new_cookie != self.secure_1psidts:
356
+ # Retentar buscar SNlM0e após atualizar cookie
357
+ resp = await self.session.get(
358
+ Endpoint.INIT.value,
359
+ timeout=self.timeout
360
+ )
361
+ resp.raise_for_status()
362
+
363
+ if "Sign in to continue" in resp.text or "accounts.google.com" in str(resp.url):
364
+ raise PermissionError("Authentication failed. Cookies might be invalid or expired. Please update them.")
365
+
366
+ snlm0e_match = re.search(r'''["']SNlM0e["']\s*:\s*["'](.*?)["']''', resp.text)
367
+ if snlm0e_match:
368
+ console.log("[green]✓ SNlM0e obtido com sucesso após atualização do cookie![/green]")
369
+ return snlm0e_match.group(1)
370
 
371
+ # Se não conseguiu atualizar ou ainda não encontrou SNlM0e
372
+ error_message = "SNlM0e value not found in response."
373
+ if resp.status_code == 429:
374
+ error_message += " Rate limit likely exceeded."
375
  else:
376
+ error_message += (
377
+ f" Response status: {resp.status_code}. "
378
+ f"Por favor, acesse https://gemini.google.com/app e copie os novos cookies "
379
+ f"__Secure-1PSID e __Secure-1PSIDTS manualmente."
380
+ )
381
+ raise ValueError(error_message)
382
  except ValueError as rotate_error:
383
  # Re-raise ValueError (já tem mensagem clara sobre atualização manual)
384
  raise
 
443
  """
444
  Rotates the __Secure-1PSIDTS cookie and saves it automatically.
445
  Returns the new cookie value if successful.
446
+ Usa todos os cookies disponíveis para autenticação.
447
  """
448
  try:
449
  console.log("[yellow]Atualizando cookie __Secure-1PSIDTS automaticamente...[/yellow]")
450
 
451
+ # Método mais confiável: Acessar a página do Gemini para obter novos cookies
452
+ # Isso funciona porque o Google atualiza o cookie automaticamente quando você acessa a página
453
+ console.log("[cyan]Acessando página do Gemini para obter novo cookie...[/cyan]")
454
+ init_response = await self.session.get(
455
+ Endpoint.INIT.value,
456
+ timeout=self.timeout
457
+ )
458
+ init_response.raise_for_status()
459
+
460
+ # Verificar se obteve novo cookie na resposta
461
+ new_1psidts = init_response.cookies.get("__Secure-1PSIDTS")
462
+ if new_1psidts and new_1psidts != self.secure_1psidts:
463
+ self.secure_1psidts = new_1psidts
464
+ self.session.cookies.set("__Secure-1PSIDTS", new_1psidts)
465
+
466
+ if self.cookie_path:
467
+ try:
468
+ save_cookies(
469
+ self.cookie_path,
470
+ self.secure_1psid,
471
+ self.secure_1psidts,
472
+ self.additional_cookies
473
+ )
474
+ console.log("[green]✓ Cookie atualizado e salvo automaticamente via acesso à página![/green]")
475
+ except Exception as save_error:
476
+ console.log(f"[yellow]Aviso: Cookie atualizado mas não foi possível salvar: {save_error}[/yellow]")
477
+
478
+ return new_1psidts
479
+
480
+ # Se não obteve novo cookie, tentar endpoint de rotação como fallback
481
+ console.log("[yellow]Não obteve novo cookie via página, tentando endpoint de rotação...[/yellow]")
482
  try:
483
  response = await self.session.post(
484
  Endpoint.ROTATE_COOKIES.value,
485
  headers={
486
  "Content-Type": "application/json",
487
  "Origin": "https://accounts.google.com",
488
+ "Referer": "https://accounts.google.com/",
489
+ "X-Requested-With": "XMLHttpRequest"
490
  },
491
  json=[0, "-0000000000000000000"],
492
  timeout=self.timeout
493
  )
494
 
 
495
  if response.status_code == 200:
496
  new_1psidts = response.cookies.get("__Secure-1PSIDTS")
497
  if new_1psidts:
 
506
  self.secure_1psidts,
507
  self.additional_cookies
508
  )
509
+ console.log("[green]✓ Cookie atualizado via endpoint de rotação![/green]")
510
  except Exception as save_error:
511
  console.log(f"[yellow]Aviso: Cookie atualizado mas não foi possível salvar: {save_error}[/yellow]")
512
 
513
  return new_1psidts
514
 
515
+ # Se endpoint retornou 404, pode ser que não exista mais ou mudeu
516
+ if response.status_code == 404:
517
+ console.log("[yellow]Endpoint de rotação retornou 404 - pode ter mudado ou não estar disponível[/yellow]")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
518
 
519
  except Exception as rotate_error:
520
+ console.log(f"[yellow]Endpoint de rotação falhou: {rotate_error}[/yellow]")
521
+
522
+ # Se não conseguiu atualizar, retornar o cookie atual (pode ainda ser válido)
523
+ console.log("[yellow]Não foi possível obter novo cookie - usando cookie atual[/yellow]")
524
+ return self.secure_1psidts
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
525
 
 
 
 
 
526
  except Exception as e:
527
  console.log(f"[red]Falha ao atualizar cookie: {e}[/red]")
528
+ # Se falhou completamente, retornar o cookie atual em vez de falhar
529
+ # Isso permite que o sistema continue funcionando mesmo se não conseguir atualizar
530
+ console.log("[yellow]Retornando cookie atual - sistema continuará funcionando[/yellow]")
531
+ return self.secure_1psidts
 
532
 
533
 
534
  async def ask(