Register Guidelines E-Books Today's Posts Search

Go Back   MobileRead Forums > E-Book Software > Calibre > Recipes

Notices

Reply
 
Thread Tools Search this Thread
Old 07-17-2011, 05:58 AM   #1
snarkophilus
Wannabe Connoisseur
snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.
 
Posts: 426
Karma: 2516674
Join Date: Apr 2011
Location: Geelong, Australia
Device: Kobo Libra 2, Kobo Aura 2, Sony PRS-T1, Sony PRS-350, Palm TX
AutoSport.com recipe

Hi folks,

Here's a recipe for autosport.com. Please be gentle, this is the first time I've written any python (although it's mostly cut'n'paste from other recipes).

There's many RSS feeds available on the autosport site, but I've used only two (that I happen to be interested in). Is there a way you can enable/disable many feeds within a single recipe? I also suspect that the recipe might work without a subscription for parts of the autosport site but I haven't played around with that.

This recipe uses the method here to only download stories once.

Here's the recipe. Feedback appreciated!

Spoiler:
Code:
import re
from calibre.constants import config_dir, CONFIG_DIR_MODE
import os, os.path, urllib
from hashlib import md5

class AutoSportF1(BasicNewsRecipe):
    title          = u'Autosport'
    oldest_article = 100
    max_articles_per_feed = 1000
    needs_subscription = True

    feeds          = [
        (u'F1 News', u'http://www.autosport.com/rss/f1news.xml'),
        (u'Features', u'http://www.autosport.com/rss/features.xml')
    ]

    remove_attributes = ['width','height']

    preprocess_regexps = [(re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in
        [
            ## Remove anything before the body of the article.
            (r'<body.*?Begin Main Box-->', lambda match: '<body>'),

            ## Remove anything before the body of the article (alternate if above doesn't work).
            (r'<body.*?-- main column -->', lambda match: '<body>'),

            ## Remove anything after the end of the article.
            (r'<!-- End Main Box.*?</body>', lambda match : '</body>'),
            ]
    ]

    def get_browser(self):
        br = BasicNewsRecipe.get_browser()
        if self.username is not None and self.password is not None:
            br.open('http://www.autosport.com/subs/login.php')

            br.select_form(nr=2)
            br['user_email']   = self.username
            br['user_password'] = self.password
            raw = br.submit().read()
            if 'Please try again' in raw:
                raise Exception('Your username and password are incorrect')
        return br

    # As seen here: https://www.mobileread.com/forums/showpost.php?p=1295505&postcount=10
    def parse_feeds(self):
        recipe_dir = os.path.join(config_dir,'recipes')
        hash_dir = os.path.join(recipe_dir,'recipe_storage')
        feed_dir = os.path.join(hash_dir,self.title.encode('utf-8').replace('/',':'))
        if not os.path.isdir(feed_dir):
            os.makedirs(feed_dir,mode=CONFIG_DIR_MODE)

        feeds = BasicNewsRecipe.parse_feeds(self)

        for feed in feeds:
            feed_hash = urllib.quote(feed.title.encode('utf-8'),safe='')
            feed_fn = os.path.join(feed_dir,feed_hash)

            past_items = set()
            if os.path.exists(feed_fn):
               with file(feed_fn) as f:
                   for h in f:
                       past_items.add(h.strip())

            cur_items = set()
            for article in feed.articles[:]:
                item_hash = md5()
                if article.content: item_hash.update(article.content.encode('utf-8'))
                if article.summary: item_hash.update(article.summary.encode('utf-8'))
                item_hash = item_hash.hexdigest()
                if article.url:
                    item_hash = article.url + ':' + item_hash
                cur_items.add(item_hash)
                if item_hash in past_items:
                    feed.articles.remove(article)
            with file(feed_fn,'w') as f:
                for h in cur_items:
                    f.write(h+'\n')

        remove = [f for f in feeds if len(f) == 0 and
                self.remove_empty_feeds]
        for f in remove:
            feeds.remove(f)

        return feeds


Cheers,
Simon.
snarkophilus is offline   Reply With Quote
Old 03-06-2020, 06:18 AM   #2
snarkophilus
Wannabe Connoisseur
snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.
 
Posts: 426
Karma: 2516674
Join Date: Apr 2011
Location: Geelong, Australia
Device: Kobo Libra 2, Kobo Aura 2, Sony PRS-T1, Sony PRS-350, Palm TX
Well, after many years of working perfectly it looks like Autosport has switched to some javascript based API mess outsourced via tinypass.com to log in. With only a vague understanding of python and getting completely lost in with APIs and callbacks after a short play with the Chrome developer tools, is reverse engineering something like this going to be overly difficult?

The login page is at https://www.autosport.com/userlogin.

Edit: I've had a quick look at the WSJ recipe. That seems to look a lot simpler than what Autosport are doing.
snarkophilus is offline   Reply With Quote
Old 03-06-2020, 09:21 PM   #3
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 45,356
Karma: 27182818
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
There is not straightforward way to fix JS login issues. You basically have to find the fields in the HTTP requests the browser sends, figure out how to fill them and send the same requests manually in the recipe.
kovidgoyal is offline   Reply With Quote
Old 03-06-2020, 11:06 PM   #4
snarkophilus
Wannabe Connoisseur
snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.
 
Posts: 426
Karma: 2516674
Join Date: Apr 2011
Location: Geelong, Australia
Device: Kobo Libra 2, Kobo Aura 2, Sony PRS-T1, Sony PRS-350, Palm TX
Thanks Kovid, I feared as much. I saw something like 650 HTTP requests to load the login page and actually log in . I think this is in the too-hard basket for now.
snarkophilus is offline   Reply With Quote
Old 03-11-2020, 02:19 PM   #5
pacha2
Member
pacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameter
 
pacha2's Avatar
 
Posts: 18
Karma: 12710
Join Date: Feb 2020
Device: Kindle Paperwhite
Hi Simon,

I hadn't see your recipe before, but I had also just created a custom one to handle the login as I am an Autosport subscriber too.
The javascript and tinypass authentication has made things much more tricky.
I have some python code that has managed to login in jupyter.
I need to translate that into a recipe.

I would recommend https://the-race.com/ now that half the autosport F1 writers have gone freelance. Currently it doesn't require a subscription, but that may change soon.

Last edited by pacha2; 03-12-2020 at 08:28 AM.
pacha2 is offline   Reply With Quote
Old 03-11-2020, 06:45 PM   #6
snarkophilus
Wannabe Connoisseur
snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.
 
Posts: 426
Karma: 2516674
Join Date: Apr 2011
Location: Geelong, Australia
Device: Kobo Libra 2, Kobo Aura 2, Sony PRS-T1, Sony PRS-350, Palm TX
Quote:
Originally Posted by pacha2 View Post
I hadn't see your recipe before, but I had also just created a custom one to handle the login as I am an Autosport subscriber too.
The javascript and tinypass authentication has made things much more tricky.
I have some python code that has managed to login in jupyter.
I need to translate that into a recipe.
I'll be interested if you get this working. I've got a programming background but my python is ... weak, but if you need an extra set of eyes please sing out. I only read Autosport via my calibre recipe, so I've cancelled the auto-renewal in my subscription (for now?) because I can't fetch my news .

Quote:
I would recommend https://the-race.com/ now that half the autosport writers have gone freelance. Currently it doesn't require a subscription, but that may change soon.
Thanks! I've had a quick look, seems interesting enough at a glance. Do you know if there's an RSS we can hook a recipe into?
snarkophilus is offline   Reply With Quote
Old 03-12-2020, 08:23 AM   #7
pacha2
Member
pacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameter
 
pacha2's Avatar
 
Posts: 18
Karma: 12710
Join Date: Feb 2020
Device: Kindle Paperwhite
Yeah the-race RSS is https://the-race.com/feed/

I've pasted and attached my very simple recipe, just adding the cover_url and masthead_url

Spoiler:

#!/usr/bin/env python2
# vim:fileencoding=utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class AdvancedUserRecipe1582718311(BasicNewsRecipe):
title = 'The Race'
oldest_article = 7
max_articles_per_feed = 20
auto_cleanup = True
cover_url = 'https://pbs.twimg.com/profile_images/1214185795608702977/e8wszJ38_400x400.png'
masthead_url = 'https://cdn.the-race.com/wp-content/uploads/2020/02/02055753/the-race-logo-full-black.png'

feeds = [
('The Race', 'https://the-race.com/feed/'),
]
Attached Files
File Type: recipe The Race_1002.recipe (638 Bytes, 199 views)
pacha2 is offline   Reply With Quote
Old 03-13-2020, 04:17 AM   #8
snarkophilus
Wannabe Connoisseur
snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.snarkophilus ought to be getting tired of karma fortunes by now.
 
Posts: 426
Karma: 2516674
Join Date: Apr 2011
Location: Geelong, Australia
Device: Kobo Libra 2, Kobo Aura 2, Sony PRS-T1, Sony PRS-350, Palm TX
Quote:
Originally Posted by pacha2 View Post
Yeah the-race RSS is https://the-race.com/feed/

I've pasted and attached my very simple recipe, just adding the cover_url and masthead_url
Cool, thank you!
snarkophilus is offline   Reply With Quote
Old 03-13-2020, 07:04 AM   #9
pacha2
Member
pacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameter
 
pacha2's Avatar
 
Posts: 18
Karma: 12710
Join Date: Feb 2020
Device: Kindle Paperwhite
I did some more digging and found there is also a pure F1 feed.
https://the-race.com/category/formula-1/feed/
pacha2 is offline   Reply With Quote
Old 03-15-2020, 12:00 PM   #10
pacha2
Member
pacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameter
 
pacha2's Avatar
 
Posts: 18
Karma: 12710
Join Date: Feb 2020
Device: Kindle Paperwhite
Smile Autosport Plus Working

After much trial, error, pain and debugging I have the Autosport login working.

I have tested this for a couple of days and seems to work for me.

Let me know how you get on.

Spoiler:

#!/usr/bin/env python2
# vim:fileencoding=utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

'''
www.autosport.com
'''

class AutosportUserRecipe(BasicNewsRecipe):
language = 'en_GB'
description = u'Smart insight. Published daily. The in-depth, independent F1 analysis you deserve.'
masthead_url = 'http://cdn.images.autosport.com/asdotcom.gif'
remove_empty_feeds = True
__author__ = 'Pacha2 using Autosport.com'
needs_subscription = True
title = 'Autosport Plus'
publication_type = 'magazine'
oldest_article = 7
max_articles_per_feed = 100
auto_cleanup = True
remove_javascript = True
ignore_duplicate_articles = {'title', 'url'}

def get_browser(self):
from mechanize import Request
import json
br = BasicNewsRecipe.get_browser(self)
if self.username is not None and self.password is not None:
# Authentication
user_agent ='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
br.addheaders = [('content-type', 'application/json'),('User-Agent', user_agent),('Referer','https://www.autosport.com/')]
br.open('https://www.autosport.com')
cred = b'{"login":"email_placeholder","password":"pass_pl aceholder","recaptchaResponse":""}'
cred = cred.replace("email_placeholder", self.username )
cred = cred.replace("pass_placeholder", self.password )
login_url = 'https://id.tinypass.com/id/api/v1/identity/login/token?aid=cxPw94Eaz6&lang=en_US'
rq = Request(login_url, headers={
'Content-Type': 'application/json',
'user-agent': user_agent,
}, data=cred)
access_token_resp = br.open(rq).read()
print ("Access Token Response " + access_token_resp)
atj = json.loads(access_token_resp)
access_token=atj['access_token']
print ("Just the Access Token " + str(access_token))
jax=br.open('https://buy.tinypass.com/api/v3/access/token/list?url=https%3A%2F%2Fwww.autosport.com%2F&aid=cx Pw94Eaz6&user_provider=piano_id&user_token='+ access_token).read()
br.open('https://id.tinypass.com/id/api/v1/identity/vxauth/cookie?client_id=cxPw94Eaz6&token='+ access_token)
jaxj = json.loads(jax)
tac = jaxj['access_token_list']['value']
print ("Authorised tac " + tac)
br.set_simple_cookie('__tac', tac, '.autosport.com', path='/')
br.set_simple_cookie('__utp', access_token, '.autosport.com', path='/')
return br

def get_cover_url(self):
from datetime import date, timedelta
## Calculate Date logic for cover Image
today = date.today()
dow=today.isoweekday()
if dow < 4:
offdow=dow+3
if dow >= 4:
offdow=dow-4
jpgdate=today - timedelta(days=offdow)
autosport_cover = 'http://digitaledition.autosport.com/issue/'+ jpgdate.strftime('%Y') + '/covers/' + jpgdate.strftime('%d%m%Y') + '.jpg'
return autosport_cover

def check_words(words):
return lambda x: x and frozenset(words.split()).intersection(x.split())


feeds = [
('Formula 1', 'https://www.autosport.com/rss/feed/f1'),
('Features', 'https://www.autosport.com/rss/feed/features'),
('All News', 'https://www.autosport.com/rss/feed/all'),
]

Attached Files
File Type: recipe Autosport Plus_1001.recipe (3.5 KB, 194 views)
pacha2 is offline   Reply With Quote
Old 03-15-2020, 11:08 PM   #11
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 45,356
Karma: 27182818
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
Do you have to hardcode the user agent? The recipe system automatically uses up-to-date user agents for desktop browsers. Also content-type should not be needed in add headers.
kovidgoyal is offline   Reply With Quote
Old 03-16-2020, 02:53 PM   #12
pacha2
Member
pacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameterpacha2 can solve quadratic equations while standing on his or her head reciting poetry in iambic pentameter
 
pacha2's Avatar
 
Posts: 18
Karma: 12710
Join Date: Feb 2020
Device: Kindle Paperwhite
Hi Kovid,

Yes, I think you are correct. I couldn't get Content-Type': 'application/json' to ever be used as the header as with the data, so must have just left that in. When does the user agent get chosen? Can I easily verify what user agent is being used?
pacha2 is offline   Reply With Quote
Old 03-16-2020, 10:29 PM   #13
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 45,356
Karma: 27182818
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
If you wish to set custom headers for a request, you can simply create a mechanize.Request object and pass it a headers dictionary. Then pass the request object to browser.open() instead of the URL.

The user agent is set when the browser object is created in get_browser(). You can see it by simply printing out browser.addheaders
kovidgoyal is offline   Reply With Quote
Reply


Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Recipe works when mocked up as Python file, fails when converted to Recipe ode Recipes 7 09-04-2011 04:57 AM
Need Help with Recipe UtahJames Recipes 1 04-12-2011 09:50 AM
New recipe kiklop74 Recipes 0 10-05-2010 04:41 PM
Recipe Help lrain5 Calibre 3 05-09-2010 10:42 PM
Recipe Help Please estral Calibre 1 06-11-2009 02:35 PM


All times are GMT -4. The time now is 01:31 AM.


MobileRead.com is a privately owned, operated and funded community.