I don't know if adding this scripting functionality to Geocoder itself is needed.

What you can do is edit pages with the script (using POM library is one option, although it's in very early stages of development and almost abandoned by me) to set some parameter in a template.

For example, read this:

{{My template
|address=Moscow, Russia
}}

and write this back:

{{My template
|address=Moscow, Russia
|geo={{subst:#geocode:Moscow, Russia}}
}}

Or something like that.

Code to do this using POM (http://www.mediawiki.org/wiki/Extension:Page_Object_Model) will be something like this:

# Get document from MediaWiki server
$pom = new POMPage($text);

# Read value of address parameter
$address = $pom->templates['Location'][0]->getParameter('address');

# Set geo parameter
$pom->templates['Location'][0]->setParameter('geo', "{{subst:#geocode:$address}}");

# Retrieve final text of the page
print $pom->asString();

I leave reading and writing to the wiki up to you (you can use &action=raw for reading and maintenance/edit.php script bundled with MediaWiki for writing, for example)

Another approach is to use PageObjectModel MediaWiki extension (POM is just a librrary, PageObjectModel is extension that uses POM) and use MW API (http://www.mediawiki.org/wiki/Extension:Page_Object_Model#MediaWiki_API_calls) making pomgettplparam and pomsettplparam calls:

for reading the address:

api.php?action=pomgettplparam&page=PageName&tpl=Location&param=address

for wriging geocoding value:

api.php?action=pomsettplparam&page=PageName&tpl=Location&param=geo&value={{subst%3A%23geocode%3AMoscow%2C+Russia}}&summary=Geocoding+bot+update

You'll need to read up on MediaWiki API (http://www.mediawiki.org/wiki/API), bots and use appropriate response format.

BTW, this is quite generic approach to scripting data with Wiki and not Geocoder specific.

          Sergey


2009/3/23 Yaron Koren <yaron57@gmail.com>
Yes, this is different - what's being talked about here is a change to the actual wiki text of the page.



On Mon, Mar 23, 2009 at 12:35 AM, Dave Loomer <dloomer@gmail.com> wrote:
I've found that whenever I modify a template, the previously-saved
pages that use that template are updated with any corresponding
changes in property values if I run runJobs.php.  But I take it this
(e.g. the #place_geocode_here example) is something different?


2009/3/22 Yaron Koren <yaron57@gmail.com>:
> This is quite a thorny problem: trying to do some kind of automated
> insertion within wiki pages - I don't believe there's any functionality like
> it now. On the other hand, it would be quite a useful feature to have, since
> that Google Maps geocoding limit is a real problem, and renders the #geocode
> function nearly useless for large sites that use templates. I've been
> thinking about this problem, and I think I've found a reasonable solution,
> but first let me go through what I think won't work:
>
> - a parser function within a template - some kind of "#place_geocode_here"
> function that, wherever it was called from a template, placed the actual
> coordinate value in the page calling the template. Problems: I'm not sure
> that this is technically possible, and even if it were, it could only help
> with pages that were created or resaved after the function was added to the
> template; it won't do anything for pages previously created. Similarly, if
> you change that call in the template, the template can't go around modifying
> all the pages that call it.
>
> - in a form - you could imagine a new field parameter like "geocode on
> fields=", that took the names of other fields (like "geocode on
> fields=street address, city, country"), and placed the geocoded value in the
> resulting page. Problems: same as before - I don't know if it's technically
> possible, and it doesn't handle pages created before that geocoding was
> added.
>
> - directly in a page - as Sergey noted in a separate thread, you could tell
> users to add a #subst call within pages when they create them. Problems: not
> doable within a form, too complicated for users in any case.
>
> So that leaves what I think is the best solution: a command-line script that
> resaves pages, adding a coordinate value to template calls. It might look
> like:
>
> AddGeocodingToPages.php template-name address-fields coordinates-field
>
> So a sample call might be:
>
> AddGecodingToPages.php Company "Street Address, City, Country" Coordinates
>
> This script would go through every page that contained a call to the
> "Company" template, get the values for the fields labelled "Street Address",
> "City" and "Country", combine these values together and call Google's
> geocoding service on that, and if it got back a set of coordinates, add to
> the template call a new line, reading "|Coordinates=...". If the page
> already contained a "Coordinates=..." line, the script would check the
> page's value against what geocoding returned and update the page if
> necessary.
>
> The script could be made to wait several seconds between lookup calls; or
> whatever a safe interval is. It could also be set to stop after doing a set
> number of lookups, like 5,000, to avoid causing problems. You could also
> then create a "cron job" to run the script, say, once a day, to handle new
> pages that got added.
>
> I think the most logical place for such a script would be in the Google
> Geocoder extension - Sergey, any thoughts? :)
>
> -Yaron
>
>
> 2009/3/20 Thomas Fellows <thomas.fellows@gmail.com>
>>
>> I definitely agree -- you also want to make sure you don't break Google's
>> API policy - which I believe limits Geocoding addresses to X number (if
>> you're not paying them) before they blacklist you.  I was talking with
>> Yaron, and I believe the best way to do this would be to have the geocode
>> extension do something similar to a template substitution - where once you
>> ping google once for the coordinates, the {{#geocode:}} tag goes away after
>> the first time and gets replcaed with the actual coordinates - because as
>> mentioned before - the geocoordinates aren't changing!
>> Anyone want to take a stab at this- or know of any extensions (tag/parser)
>> that replace themselves with text after hitting save?
>> -tom
>> p.s. - i wonder if {{SUBS:#geocode:...}} works (or whatever the syntax is
>> for template subs)
>>
>> On Fri, Mar 20, 2009 at 5:11 PM, Keith Fligg <Keith.Fligg@pnl.gov> wrote:
>>>
>>> Agreed, it wouldn’t be courteous to request the data from Google multiple
>>> times for the same location.  I guess what I was hoping for was a means of
>>> acquiring the lat/lng from Google if it was missing, and then turning it
>>> into a Property of the appropriate type, and then storing the property with
>>> the original record.  Then subsequent attempts to map the record would use
>>> the (stored) property.
>>>
>>>
>>> On 3/20/09 2:05 PM, "Sergey Chernyshev" <sergey.chernyshev@gmail.com>
>>> wrote:
>>>
>>> I would not recommend to do it on the fly simply because you don't want
>>> to run requests to Google service every time some data in the query changes
>>> - it's better to just simply augment pages with coordinates in your original
>>> documents, after all, if address didn't change, coordinates didn't either,
>>> right?
>>>
>>>          Sergey
>>>
>>>
>>> --
>>> Sergey Chernyshev
>>> http://www.sergeychernyshev.com/
>>>
>>>
>>> 2009/3/20 Thomas Fellows <thomas.fellows@gmail.com>
>>>
>>> Oops:
>>>
>>> I'm not sure if there is a way to geocode through an ask query (e.g.,
>>> geocode a list of results on the fly).  If someone has an idea on how to do
>>> this, I'd be interested!  The way I understand to do it is the first method
>>> of adding the property.
>>>
>>> Hope this helps a little
>>>
>>> -tom
>>>
>>> On Fri, Mar 20, 2009 at 8:28 AM, Thomas Fellows
>>> <thomas.fellows@gmail.com> wrote:
>>>
>>> hey keith,
>>>
>>> first, things to look at:
>>>
>>> http://www.mediawiki.org/wiki/Extension:Google_Geocoder
>>>
>>> http://www.mediawiki.org/wiki/Extension:Semantic_Google_Maps#Geocoding_addresses
>>>
>>> There are two ways to do it - if your imported data is displayed using a
>>> template, you can create the geographic coordinate property by adding to the
>>> template something like [[Has coordinate::{{{Street Address}}}]] (or if it's
>>> separated [[Has coordinate::{{{Street Address}}}, {{{City}}}, {{{State}}}]]
>>>  etc.  -- wait for everything to refresh and your data should now have a
>>> property.
>>>
>>> the more "on the fly" way of doing it (from the site above) -
>>> "{{#semantic_google_map:{{#geocode:{{{Street address}}}, {{{City}}},
>>> {{{State}}}, {{{Country}}}}}}}"
>>>
>>>
>>> I'm not sure if there is a way to geocode  q
>>>
>>>
>>> 2009/3/19 Keith Fligg <Keith.Fligg@pnl.gov>
>>>
>>> I’ve got several thousand pages that we imported into our MediaWiki that
>>> each contain a ‘Location’ property of type string.  We would like to be able
>>> to use the Google geocoder to lookup the coordinates of that property, and
>>> then use those coordinates to display the locations using the
>>> SemanticGoogleMaps extension.  All of this within an ask query.
>>>
>>> The issue is that SemanticGoogleMaps is looking for a property of type
>>> ‘Geographic coordinate’ and we don’t have that information in our imported
>>> documents.  If there were some way to generate that property on the fly
>>> during the ask query, and feed it into the map, it would save us the trouble
>>> of having to process, and reimport the data.
>>>
>>> It seems like someone must have butt up against the problem in the past,
>>> we just can’t find any reference to a solution.  Does anyone have any idea
>>> of how we might be able to get this done?
>>>
>>> Thanks for any help,
>>>
>>>  - Keith
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
>>> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
>>> easily build your RIAs with Flex Builder, the Eclipse(TM)based
>>> development
>>> software that enables intelligent coding and step-through debugging.
>>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
>>> _______________________________________________
>>> Semediawiki-user mailing list
>>> Semediawiki-user@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/semediawiki-user
>>>
>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
>>> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
>>> easily build your RIAs with Flex Builder, the Eclipse(TM)based
>>> development
>>> software that enables intelligent coding and step-through debugging.
>>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
>>> _______________________________________________
>>> Semediawiki-user mailing list
>>> Semediawiki-user@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/semediawiki-user
>>>
>>>
>>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
>> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
>> easily build your RIAs with Flex Builder, the Eclipse(TM)based development
>> software that enables intelligent coding and step-through debugging.
>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
>> _______________________________________________
>> Semediawiki-user mailing list
>> Semediawiki-user@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/semediawiki-user
>>
>
>
> ------------------------------------------------------------------------------
> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
> easily build your RIAs with Flex Builder, the Eclipse(TM)based development
> software that enables intelligent coding and step-through debugging.
> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> _______________________________________________
> Semediawiki-user mailing list
> Semediawiki-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/semediawiki-user
>
>


------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Semediawiki-user mailing list
Semediawiki-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/semediawiki-user