[Zope] Source from form result.

Danny William Adair Danny@Adair.net
Wed, 2 May 2001 11:26:29 +1200


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 )
>>>