2012-04-12 14 views
7

İki bölümden oluşan küçük bir uygulama oluşturuyorum: Bunlardan biri bir Chrome tarayıcısında görüntülenirken diğeri Python'da programlanmış yerel bir uygulamadır.Ubuntu Chrome: Bir python betiğinden bir çerez nasıl okunur?

Chrome'da, kullanıcının tercih ettiği dili seçmek için bir <select> vardır. Bu bilgi bir çerezde Chrome tarafından saklanır.

Bu dili tercih etmenin (tanımlama bilgisi okuma) mümkün olup olmadığını öğrenmek istiyorum, böylece yerel uygulamayı çalıştırdığımda, kullanıcının zaten Chrome ile seçtiği aynı dilde görüntülenecektir.

Sistemin yerini değiştiremiyorum (muhtemelen en mantıklı olanı). Bu, İngilizce'de kalmalıdır, ancak kullanıcı Chrome aracılığıyla tercih edilen dil olarak Çince Çin'i seçerse ve ardından yerel uygulamayı başlatırsa, bu uygulamanın Çince'dan başlamasını istiyorum.

Chrome için command line switches numaralı telefonu inceledim, ancak çok yararlı bir şey görmedim. En çok, --enable-file-cookies seçeneği ve daha sonra tanımlama bilgisi dosyasını açmayı ve ayrıştırmayı deneyin ... her nasılsa, ancak bulabildiğim tüm bilgiler oldukça belirsiz.

Teşekkürler!

Güncelleme. Daha fazla arama (1, 2), Chrome'un SQL lite'yi kullanarak çerezleri sakladığını gösterir. Ben buna bakıyorum. Belki de bununla ilgili bir umut var ...

+0

hem python istemcisi hem de web sitesi bir sunucuyla konuşuyor mu? öyleyse, dil tercihini orada (tarayıcı tarafından gönderilen) saklayabilir ve bilgileri python istemcisinden alabilirsiniz ... – Hoff

+0

@Hoff -> Bunu da düşündüm. Python istemcisi sunucuyla tam olarak konuşmuyor, ancak sunucu localhost'ta çalışıyor (pratik amaçlar için) yanıt "evet". Dil tercihlerini depolayan sunucu olabilir. Son bir kaynak olarak kalacağım ... Ayrıca, Chrome'daki çerez yönetimi hakkında da çok meraklıyım. Ayrıca, Chrome tarafından sabit diskte (çerezde) saklanan tercih edilen dil zaten varsa ve sunucuyu kullanarak yeniden depolamayı önleyebilirim, bu harika olur. Fikir için teşekkürler, ama *:) * – BorrajaX

+0

sqlite3 ~/.config/google-chrome/Default/Cookies komutları umut verici görünüyor ... – BorrajaX

cevap

8

Evet, soruya değindiğim gibi, sqlite3 ümit vaat ediyor ... Okumayı öğrendiğim gün, dünyayı fethedeceğim !! Neyse

, her ihtimale karşı başkası için faydalıdır: Bu küçük pasajı Çerezler "veritabanında" (aslında sadece ... neyse, dosya ama) bağlanacak

#!/usr/bin/env python 
import os 
import sqlite3 
import pwd 

_cookieName = "preferredLanguage" 

def getPreferredLanguageFromCookieDB(): 
    retval="en-US" 
    cookieDBFilename = os.path.join(pwd.getpwuid(1000).pw_dir, ".config/google-chrome/Default/Cookies") 
    if os.path.isfile(cookieDBFilename): 
     connection = sqlite3.connect(cookieDBFilename) 
     querier = connection.cursor() 
     numCookiesMatching = int(querier.execute('SELECT COUNT(*) FROM cookies WHERE (host_key="127.0.0.1" or host_key="localhost") and name="%s"' % (_cookieName)).fetchone()[0]) 
     if numCookiesMatching == 1: 
      retval = querier.execute('SELECT value FROM cookies WHERE (`cookies`.`host_key`="127.0.0.1" or `cookies`.`host_key`="localhost") and `cookies`.`name` = "%s"' % (_cookieName)).fetchone()[0] 
     elif numCookiesMatching == 0: 
      print("::getPreferredLanguageFromCookieDB > No cookie for '%s' found. Assuming wizard hasn't run yet, which is weird, but not critical" % (_cookieName)) 
      retval="en-US" 
     else: 
      raise KeyError("Found %s cookies matching %s in file %s. This shouldn't have happened" % (numCookiesMatching, _cookieName, cookieDBFilename)) 
      retval=None 
    else: 
     print("::getPreferredLanguageFromCookieDB > Cookie 'db' (actually, file) %s doesn't exist" % (cookieDBFilename)) 
     retval="en-US" 

    return retval 


if __name__ == "__main__": 
    print "Prefered language: %s" % getPreferredLanguageFromCookieDB() 

ve değerini okumak localhost veya 127.0.0.1 tarafından verilen "preferredLanguage" çerezini. Localhost tarafından verilen birden fazla "preferredLanguage" çerezi varsa çökecektir.

İlgili konular