AW: [Zope] Source from form result.
Tino Wildenhain
tino@wildenhain.de
Wed, 02 May 2001 15:36:32 +0200
Hi Marc,
zope has a "client" deep in its core :)
See lib/python/ZPublisher/Client.py
for more info.
I currently use a external method like this:
from ZPublisher import Client
def web_client(url = '', username = None, password = None, **kw):
'''access http servers'''
class gen_res:
__allow_access_to_unprotected_subobjects__=1
f=gen_res()
if kw:
f.headers,f.body=Client.call(url,username,password,kw)
else:
f.headers,f.body=Client.call(url,username,password)
return(f)
And use it like this:
<dtml-with "web_client('http://server/uri')">
<dtml-var body>
</dtml-with>
In Client.py are also methods and functions to map arguments
to a POST request as you wish.
I think, the above could be a starting point for you.
HTH
Tino Wildenhain
--On Mittwoch, 2. Mai 2001 12:12 +0200 Marc Fischer <marcbpc@gmx.de> wrote:
> Hi Danny,
>
> first of all thank you for your detailed help!!! That is nearly, what I am
> looking for, but one problem exists:
> The page I want to extract (you are right ... its on an external server)
> does not work with passing the variables in the url. I mean ...
>
> http://server?x=a&y=b does not work.
>
> I need to do it with a form like:
>
> <form action="http://server" method=POST>
> <input type=hidden name="x" value="a">
> <input type=hidden name="y" value="b">
> <input type=submit>
> </form>
>
> That's my big big problem. Btw, ... its legal :-)))
>
> Marc
>
>
>
>
>
>
>> -----Ursprungliche Nachricht-----
>> Von: Danny William Adair [mailto:Danny@Adair.net]
>> Gesendet: Mittwoch, 2. Mai 2001 01:26
>> An: Marc Fischer; Paula Mangas
>> Cc: zope@zope.org
>> Betreff: Re: [Zope] Source from form result.
>>
>>
>> Hi Marc,
>>
>> When you submit a form to one of your DTML methods or documents, all the
>> form variables will be available without any further work to be done
>> (REQUEST object, see docs). But if I get you right, you are not
>> submitting your form to a method of your own. So things are a bit
>> different here.
>>
>> As I understand it, you are submitting your form to someone else's server
>> (since otherwise you would produce the output yourself). Maybe you're
>> providing an input form that is directed to a search engine, or something
>> similar.
>>
>> --------------------------------------------
>> <form action="http://server" method=POST>
>> <input type=hidden name="x" value="a">
>> <input type=hidden name="y" value="b">
>>
>> <input type="text" name="myInput">
>>
>> <input type=submit>
>> </form>
>> --------------------------------------------
>>
>> If so, then you should take a look at the "KebasData" Product:
>> http://www.zope.org/Members/kedai/KebasData
>>
>> Just instantiate a KebasData object, let's say "results". Take a
>> look at the
>> product's documentation to see how you can extract the relevant code from
>> the external server's result page. I'll try to get you started right
>> away:
>>
>> Set the regular expression patterns properly, start with
>>
>> .*
>>
>> as the search pattern and leave the rest blank ("url" will be set
>> by a DTML
>> method you create, see below), then you'll get the entire
>> external page, you
>> can change that later to fit your needs.
>>
>> Then create a DTML method next to it, lets say "getResults". It could
>> look like this:
>>
>> <dtml-var standard_html_header>
>> <h2>RESULTS</h3>
>> <dtml-with results>
>> <dtml-call "REQUEST.set('new_url', 'http://server?search=' + myInput)">
>> <dtml-call "get_matched(new_url)">
>> <dtml-in match>
>> <dtml-var result><br/>
>> </dtml-in>
>> </dtml-with>
>> <dtml-var standard_html_footer>
>>
>> This will fetch the page you want to display by calling
>> "get_matched(new_url)", you construct that new_url dynamically, using
>> your form variable "myInput". Then it iterates through the results
>> list and spits
>> out the parts that matched your query, appending a <br/> after each match
>> (if you started with .* as the pattern, the list will only have one item,
>> holding the complete page).
>>
>> Oh, right: your DTML method should have a proxy role that has the right
>> to "change KebasData" (or maybe even "View management_screens"?) on the
>> KebasData object "results", since it calls its function
>> "get_matched", which
>> is usually only called by clicking "Initialize!" in the
>> management screen of
>> the KebasData object.
>>
>> Now you just send your form to "getResults" (instead of the
>> external server
>> directly), and let your DTML method do the rest:
>>
>> --------------------------------------------
>> <form action="getResults" method=POST>
>> <input type=hidden name="x" value="a">
>> <input type=hidden name="y" value="b">
>>
>> <input type="text" name="myInput">
>>
>> <input type=submit>
>> </form>
>> --------------------------------------------
>>
>> Later, you could put the "getResults" code in a python script, then it's
>> easier to do further processing with your fetched data.
>>
>> hth,
>> Danny
>>
>> P.S.: Check the legal stuff before extracting other people's pages ;-)
>>
>> >>> -----Ursprungliche Nachricht-----
>> >>> Von: zope-admin@zope.org [mailto:zope-admin@zope.org]Im
>> Auftrag von Marc
>> >>> Fischer
>> >>> Gesendet: Dienstag, 1. Mai 2001 11.43p
>> >>> An: Paula Mangas; Marc Fischer
>> >>> Cc: zope@zope.org
>> >>> Betreff: AW: [Zope] Source from form result.
>> >>>
>> >>>
>> >>> Hi,
>> >>>
>> >>> I think there was an understanding problem. I want to get the
>> >>> source code of
>> >>> the result that is displayed in the browser, after klicking on
>> >>> the submit
>> >>> button. I want to be able to handle this source perhabs to create a
>> >>> dtmlmethod wiht it, or do some string extractions with it.
>> >>>
>> >>>
>> >>>
>> >>> > -----Ursprungliche Nachricht-----
>> >>> > Von: Paula Mangas [mailto:pamm@students.si.fct.unl.pt]
>> >>> > Gesendet: Dienstag, 1. Mai 2001 13:25
>> >>> > An: Marc Fischer
>> >>> > Cc: zope@zope.org
>> >>> > Betreff: Re: [Zope] Source from form result.
>> >>> >
>> >>> >
>> >>> > On Tue, 1 May 2001, Marc Fischer wrote:
>> >>> >
>> >>> > > Hi,
>> >>> > >
>> >>> > > I want to get the HTML result from a form into a dtml method.
>> >>> > So I need a
>> >>> > > way to handle this result, but HOW.
>> >>> > >
>> >>> > > The form ist like this:
>> >>> > >
>> >>> > > <form action="http://server" method=POST>
>> >>> > > <input type=hidden name="x" value="a">
>> >>> > > <input type=hidden name="y" value="b">
>> >>> > > <input type=submit>
>> >>> > > </form>
>> >>> > >
>> >>> > > If I klick on submit, I get the result displayed in the
>> >>> Browser, but I
>> >>> > > cannot work with it.
>> >>> > > Perhaps someone could help me???
>> >>> >
>> >>> >
>> >>> > Hi,
>> >>> >
>> >>> >
>> >>> > I think that, if you try
>> >>> > <form action="http://server/the_method_you_want_to_call"
>> method=POST>
>> >>> >
>> >>> > it will work.
>> >>> >
>> >>> > Paula
>> >>> >
>> >>>
>> >>>
>> >>> _______________________________________________
>> >>> Zope maillist - Zope@zope.org
>> >>> http://lists.zope.org/mailman/listinfo/zope
>> >>> ** No cross posts or HTML encoding! **
>> >>> (Related lists -
>> >>> http://lists.zope.org/mailman/listinfo/zope-announce
>> >>> http://lists.zope.org/mailman/listinfo/zope-dev )
>> >>>
>>
>
>
> _______________________________________________
> Zope maillist - Zope@zope.org
> http://lists.zope.org/mailman/listinfo/zope
> ** No cross posts or HTML encoding! **
> (Related lists -
> http://lists.zope.org/mailman/listinfo/zope-announce
> http://lists.zope.org/mailman/listinfo/zope-dev )