Zend Framework: ZendX_Service_Rakuten Component Proposal
| Proposed Component Name | ZendX_Service_Rakuten |
|---|---|
| Developer Notes | http://framework.zend.com/wiki/display/ZFDEV/ZendX_Service_Rakuten |
| Proposers | Satoru Yoshida Ralph Schindler, Zend liaison |
| Revision | ------31 Dec:Name change from Zend_ to ZendX_ ------11 Dec:add explanation of method parameters. 0.8 - 28 Nov 2008:I made APIs correspond from version 1.10 to 1.12 and I implemented the checking of the required parameters. 0.7 - 26 Dec: update References, Use Cases and Class Skeletons. 0.6 - 19 Dec: update References, Class Index, Use Cases and Class Skeletons. 0.5 - 11 Dec: update References, Use Cases and Class Skeletons. 0.4 - 22 Nov: update all except Dependencies and Milestones. 0.3 - 21 May: update class skeletons. 0.2 - 15 March 2007: add class skeletons. (wiki revision: 34) |
Table of Contents
1. Overview
ZendX_Service_Rakuten is a interface to use the "Rakuten Web service" that is provided by the Rakuten, Inc. .
2. References
The following links are API references written in Japanese. I write method names and brief description for each API.
- Rakuten Web Service
- for the Rakuten Market
- searchItem() - Search items. Uses ItemSearch API
parameter type min max required default explanation following in params array affiliateId string null affiliate id callBack string null function name of Json call back keyword string may required null key word. One of keyword, genreId or catalogCode is required shopCode string null shop code genreId int 0 may required 0 genre id. One of keyword, genreId or catalogCode is required. catalogCode string may required null catalog code. One of keyword, genreId or catalogCode is required hits int 1 30 30 items per page. page int 1 100 1 page limits. sort string standard sort type. (mark)affiliateRate, (mark)reviewCount, (mark)itemPrice, (mark)updateTimestamp or standard. (mark) means plus or minus mark, each mark means Ascend and Descend. For example, +itemPrice minPrice int 0 null minimum price maxPrice int 0 null maximum price. It must be grater than minPrice availability int 0 1 1 0:all items, 1:only items that can be bought field int 0 1 1 0:search widely, 1:search narrowly carrier int 0 1 0 0:PC, 1:mobile imageFlag int 0 1 0 0:all item, 1:only items that has image orFlag int 0 1 0 0:AND keywords, 1:OR keywords NGKeyword string null keyword that you want to omit genreInformationFlag int 0 1 0 No Use. 0:not get count of items that are in the same genre, 1:get count. This method supports only 0. - searchGenre() - Retrieve genre's information. Uses GenreSearch API
parameter type min max required default explanation type string required child information type. child, parent or current genreId int 0 required 0 genre id. If parent is specified, genre id must be grater than 0. following in optparams array affiliateId string null affiliate id callBack string null function name of Json call back genrePath int 0 1 No Use. genrePath is auto controlled in this method. - searchItemCode() - Retrieve item's information by item code. Uses ItemCodeSearch API
parameter type min max required default explanation code string required item code following in optparams array affiliateId string null affiliate id callBack string null function name of Json call back carrier int 0 1 0 0:PC, 1:mobile - searchCatalog() - Search items by catalog. Uses CatalogSearch API
parameter type min max required default explanation following in params array affiliateId string null affiliate id callBack string null function name of Json call back keyword string may required null key word. One of keyword or genreId is required genreId int 0 may required 0 genre id. One of keyword or genreId is required. hits int 1 30 30 items per page. page int 1 100 1 page limits. sort string -registerDate sort type. (mark)registerDate,(mark)releaseDate, (mark)reviewNum or random. (mark) means plus or minus mark, each mark means Ascend and Descend. For example, +reviewNum field int 0 1 1 0:search widely, 1:search narrowly imageFlag int 0 1 0 0:all item, 1:only items that has image releaseRange int 0 12 0 0:no limit, 1-12:search only sold in specified months orFlag int 0 1 0 0:AND keywords, 1:OR keywords NGKeyword string null keyword that you want to omit genreInformationFlag int 0 1 0 No use. cf. searchItem() - itemRanking() - Retrieve item ranking. Uses ItemRanking API
parameter type min max required default explanation following in optparams array affiliateId string null affiliate id callBack string null function name of Json call back genreId int 0 null genre id. age int 10 50 null age zone. 10:teen agers, 20:20 agers, 30:30 agers, 40:40 agers, 50:50 over sex int 0 1 null sex. 0:men, 1:women
- searchItem() - Search items. Uses ItemSearch API
- for the Rakuten Books
- searchBook() - search books. Uses BookSearch API
parameter type min max required default explanation following in params array affiliateId string null affiliate id callBack string null function name of Json call back keyword string may required null key word. One of keyword or genreId is required genreId int 0 may required 0 genre id. One of keyword or genreId is required. The root id of the genreId must be 200162(books, magazine and comic). hits int 1 30 30 items per page. page int 1 100 1 page limits. sort string standard sort type. (mark)affiliateRate, (mark)reviewCount, (mark)itemPrice, (mark)updateTimestamp or random. (mark) means plus or minus mark, each mark means Ascend and Descend. For example, +itemPrice minPrice int 0 null minimum price maxPrice int 0 null maximum price. It must be grater than minPrice. availability int 0 1 1 0:all items, 1:only items that you can buy. field int 0 1 1 0:search widely, 1:search narrowly carrier int 0 1 0 0:PC, 1:mobile imageFlag int 0 1 0 0:all item, 1:only items that has image orFlag int 0 1 0 0:AND keywords, 1:OR keywords NGKeyword string null keyword that you want to omit genreInformationFlag int 0 1 0 No use. cf. searchItem() - searchCd() - search CDs. Uses CDSearch API
This method has same parameters like searchBook(). But the root id of the genreId must be 101311(CD). - searchDvd() - search DVDs. Uses DVDSearch API
This method has same parameters like searchBook(). But the root id of the genreId must be 101354(DVD).
- searchBook() - search books. Uses BookSearch API
- for the Rakuten Auction
- searchAuctionItem() - Search items. Uses AuctionItemSearch API
parameter type min max required default explanation following in params array affiliateId string null affiliate id callBack string null function name of Json call back keyword string may required null key word. One of keyword or genreId is required genreId int 0 may required 0 genre id. One of keyword or genreId is required. hits int 1 30 30 items per page. page int 1 100 1 page limits. minPrice int 0 null minimum price maxPrice int 0 null maximum price. It must be grater than minPrice. sort string +endTime sort type. (mark)endTime, (mark)itemPrice, (mark)bidCount or (mark)affiliateRate. (mark) means plus or minus mark, each mark means Ascend and Descend. For example, +itemPrice blowFlag int 0 1 0 0:all items, 1:only items that you can buy without waiting auction's end. itemType int 0 3 0 0:all items, 1:only items that are sold by personal seller, 2:only items that are sold by shops, 3:only items that are sold by auction shops newFlag int 0 2 0 0:all items, 1:only used items, 2:only unused items field int 0 1 1 0:search widely, 1:search narrowly carrier int 0 1 0 0:PC, 1:mobile imageFlag int 0 1 0 0:all item, 1:only items that has image orFlag int 0 1 0 0:AND keywords, 1:OR keywords NGKeyword string null keyword that you want to omit - searchAuctionItemCode() - Retrieve item's information by item code. Uses AuctionItemCodeSearch API
parameter type min max required default explanation code string required item code following in optparams array affiliateId string null affiliate id callBack string null function name of Json call back carrier int 0 1 0 0:PC, 1:mobile
- searchAuctionItem() - Search items. Uses AuctionItemSearch API
- for the Rakuten Travel
- searchSimpleHotel() - Search hotels. Uses SimpleHotelSearch API
parameter type min max required default explanation following in params array affiliateId string null affiliate id callBack string null function name of Json call back largeClassCode string may required null area code. It specifies most wide area. For example, country. You can get the class codes list with getAreaClass(). One of the class codes set, hotelNo or latitude/longitude pair is required. middleClassCode string may required null area code. It is children of largeClassCode. smallClassCode string may required null area code. It is children of middleClassCode. detailClassCode string may required null area code. It is children of smallClassCode. hotelNo integer may required null hotel number. One of the class codes set, hotelNo or latitude/longitude pair is required. latitude float may required null latitude. One of the class codes set, hotelNo or latitude/longitude pair is required. Unit is specified with datumType. longitude float may required null longitude. Unit is specified with datumType. searchRadius float 0.1 3.0 1.0 radius in searching. enable if you use the latitude/longitude pair. Unit is Km. squeezeCondition string null condition of hotel. kinen?only hotels that have no smoking rooms, internet?only hotels where you can enjoy internet, daiyoku?only hotels that have swimming bath, onsen?only hotels that have hot springs. carrier int 0 1 0 0:PC, 1:mobile hits int null limit hit counts. enable if you use the latitude/longitude pair. datumType int 1 2 2 1:Unit is degree, 2:Unit is second. - searchHotelDetail() - Retrieve hotel's information by hotel number. Uses HotelDetailSearch API
parameter type min max required default explanation hotelNo integer required hotel number following in optparams array affiliateId string null affiliate id callBack string null function name of Json call back carrier int 0 1 0 0:PC, 1:mobile datumType int 1 2 2 1:Unit is degree, 2:Unit is second. - searchVacantHotel() - Search hotels that have vacant room. Uses VacantHotelSearch
parameter type min max required default explanation type string required hotel information type. hotel or room. checkinDate date required null YYYY-MM-DD in Asia/Tokyo time zone. checkoutDate date required null YYYY-MM-DD in Asia/Tokyo time zone. following in optparams array affiliateId string null affiliate id callBack string null function name of Json call back largeClassCode string may required null area code. It specifies most wide area. For example, country. You can get the class codes list with getAreaClass(). One of the class codes set, hotelNo or latitude/longitude pair is required. middleClassCode string may required null area code. It is children of largeClassCode. smallClassCode string may required null area code. It is children of middleClassCode. detailClassCode string may required null area code. It is children of smallClassCode. hotelNo integer may required null hotel number. One of the class codes set, hotelNo or latitude/longitude pair is required. adultNum int 1 99 1 adult members count upClassNum int 0 99 0 members count. The members are over elementary school higher students. lowClassNum int 0 99 0 members count. The members are under elementary school lower students. infantWithMBNum int 0 99 0 infant members count. They need foods and blankets. infantWithMNum int 0 99 0 infant members count. They need only blankets. infantWithBNum int 0 99 0 infant members count. They need only foods. infantWithoutMBNum int 0 99 0 infant members count. They no need foods and blankets. roomNum int 1 999 1 required room count maxCharge int 0 9999999999 null 0:PC, 1:mobile. It must be grater than minCharge. minCharge int 0 9999999999 null 0:PC, 1:mobile latitude float may required null latitude. One of the class codes set, hotelNo or latitude/longitude pair is required. Unit is specified with datumType. longitude float may required null longitude. Unit is specified with datumType. searchRadius float 0.1 3.0 1.0 radius in searching. enable if you use the latitude/longitude pair. Unit is Km. squeezeCondition string null condition of hotel. kinen?only hotels that have no smoking rooms, internet?only hotels where you can enjoy internet, daiyoku?only hotels that have swimming bath, onsen?only hotels that have hot springs, breakfast:only hotels where you can take breakfast, dinner:only hotels where you can take dinner. carrier int 0 1 0 0:PC, 1:mobile datumType int 1 2 2 1:Unit is degree, 2:Unit is second. hits int null limit hit counts. enable if you use the latitude/longitude pair. - getAreaClass() - Retrieve choices of area. Uses GetAreaClass API
parameter type min max required default explanation following in optparams array affiliateId string null affiliate id callBack string null function name of Json call back - searchKeywordHotel() - Search hotels by word. Uses KeywordHotelSearch API
parameter type min max required default explanation keyword string required key word. following in optparams array affiliateId string null affiliate id callBack string null function name of Json call back carrier int 0 1 0 0:PC, 1:mobile page int 1 page limits. hits int 1 100 20 items per page. sumDisplayFlag int 0 1 0 0:not display features about the area and the hotel, 1:display. middleClassCode string null area code. You can get the list with getAreaClass().
- searchSimpleHotel() - Search hotels. Uses SimpleHotelSearch API
- Other purpose
- dynamicAd() - Retrieve dynamic advertisements that is suitable for content in URL that you specify. Uses DynamicAd API and DynamicAd API (travel)
parameter type min max required default explanation type string required item advertisement type. item or travel. affiliateId string required affiliate id url string required URL following in optparams array carrier int 0 1 0 0:PC, 1:mobile callBack string null function name of Json call back
- dynamicAd() - Retrieve dynamic advertisements that is suitable for content in URL that you specify. Uses DynamicAd API and DynamicAd API (travel)
- for the Rakuten Market
3. Component Requirements, Constraints, and Acceptance Criteria
- Implements the "Rakuten Web Service" APIs.
- Returns server responses as lightweight data objects.
4. Dependencies on Other Framework Components
- Zend_Rest_Client
- Zend_Service_Exception
5. Theory of Operation
Returns server response as the SimpleXMLElement.
6. Milestones / Tasks
- Milestone 1: Class development and write proposal : Finished!
- Milestone 2: Unit tests and debugging : Now working.
- Milestone 3: Documentation : Now working
7. Class Index
- ZendX_Service_Rakuten
8. Use Cases
| UC-01 |
|---|
Search 3 items by word, "Zend Studio". Its case is most simple case.
| UC-02 |
|---|
Retrieve hotels that have vacant room for 1 adult person in the kasukabe city from today to tommorow.
The kasukabe city is in the saitama ward, and the saitama ward is in japan.
The checkinDate and checkoutDate are in Asia/Tokyo (GMT +9) time zone.
| UC-03 |
|---|
Display advertisements that is suitable for www.zend.com .
dynamicAd() needs your affiliate ID from the Rakuten web service.
30 Comments
comments.show.hideMar 22, 2007
Matthew Ratzloff
Instead of:
Use:
That eliminates all the repetitive getVersion() methods. Instead, the version can be retrieved with Zend_Service_Rakuten::API_VERSION in the event that someone needs it.
Minor class naming correction:
Zend_Service_Rakuten_CDSearch => Zend_Service_Rakuten_CdSearch
Zend_Service_Rakuten_DVDSearch => Zend_Service_Rakuten_DvdSearch
Is it possible to combine HotelDetailSearch and VacantHotelSearch into simply HotelSearch? Likewise for ItemSearch and ItemCodeSearch.
Mar 28, 2007
TERUI Shingo
Thank you for your comment.
class name of "Zend_Service_Rakuten_*" depends on the name of API of Rakuten Web Service.
I am mending the design of these class now.
I will renew the script and Wiki on the week first of April.
May 23, 2007
TERUI Shingo
I updated wiki on May 21.
I classified inquiry classes in 'Zend_Service_Rakuten_Item' and 'Zend_Service_Rakuten_Travel'.
'Zend_Service_Rakuten_Item' contains a function about shopping mall.
'Zend_Service_Rakuten_Travel' contains a function about 'Rakuten Travel' service.
Aug 07, 2007
Darby Felton
Why are many methods indicated as final? Is there a good reason for this? Does this not hinder extensibility, or do we expect that no one would ever need to override these methods?
I have the same questions as above for all the private variables. Probably these should be protected unless there are good reasons?
I notice in the code inconsistent usage of final keyword with respect to its position in the function declaration (e.g., final public and public final). I would recommend to be consistent with final public, as documented in the PHP manual. (I admit that this is inconsistent with the recommendation of public static, since the keywords appear in different orders, but the consistency is with the PHP manual pages on these keywords. Either way may be fine, but we should be consistent.)
Here is an idea - what about having a Zend_Service_Rakuten class, through which both Zend_Service_Rakuten_Item and Zend_Service_Rakuten_Travel are readily accessible? This new class would conveniently provide access to all of the currently available Rakuten services and could support additional services released in the future. Maybe it could follow the spirit of the fluent interfaces already available throughout the proposed component:
The basic idea is to provide a single point of entry to the Rakuten web services consumer component for ZF. If this is not a good idea, why not?
If such a thing would be useful and convenient, would the first-level methods such as item() and travel() return new instances each time they are called, or are the instances cached within the class (e.g., as static members) for reuse?
Sep 18, 2007
Akihiro Okabe
> Why are many methods indicated as final?...
I read these scripts and can understand from these as follows.
The all of final method are used in abstract class that are closely based on the specification of Rakuten API.
I think that these should not be extended by end user. If someone needs to extend these, we will hear that the time when this component should have been changed come. Till then, he does not need to use this component by force. He can call Rakuten API directly.
Please excuse since I did not necessarily ask Terui-san, when there is a misapprehension. But what do you think about my opinion?
> I notice in the code inconsistent usage of final keyword with respect to its position in the function declaration...
We have to repair this matter. I also think that sauce should follow the manual.
> Here is an idea...
Your idea looks excellent!! It seems that the reason for resisting this does not have anything. We may create new file 'Zend/Service/Rakuten.php' having Zend_Service_Rakuten class.
Oct 30, 2007
Darby Felton
Any word on updating the proposal to reflect the latest commentary?
Nov 21, 2007
Satoru Yoshida
Hello, I rewrited.
Now we can use all methods by only including Zend_Service_Rakuten class.
And no final and private keywords.
Dec 19, 2007
Satoru Yoshida
Oh! thank you for reading this pages and very quick response.
I will think about it carefully.
Nov 27, 2007
Simone Carletti
What about returning a result object (and perhaps collected in a resultset object) instead of delegating to the developer the need to use an XPath query?
I find the latter approach a little uncomfortable because requires the developer to have a deep knowledge of Rakuten XML response structure.
For instance, looking at UC-01 now I know that the following one is the best XPath expression for items
But does it fit a catalog search as well?
I would suggest to incorporate xpath query within the main class and let the user focus on reading result objects instead of querying XML.
Additionally, the fact that API documentation is only available in Japanese requires to avoid (or at least reduce) the need for the developer to read it.
Reading previous feedbacks, it seems a similar proposal was posted by Darby Felton a few comments ago.
Dec 05, 2007
Darby Felton
I think that Simone deserves the credit for this suggestion, which I support. I definitely see added value from encapsulating the implementation (e.g., xpath queries) with easy-to-use, object-oriented goodness.
Dec 11, 2007
Satoru Yoshida
Hello, Derby, Thank you for advice.
I improve this component just today, I expect advices from you if you have time to read this.
Dec 11, 2007
Satoru Yoshida
Hello, Simone. Thank you for comment.
I change this component to move xpath() into each methods for developers having no need to querying XML.
Unfortunately, the Rakuten, Inc. has no english docments, but is used by 18 million peoples. (at Jan. 2006)
It is greater than Amazon.co.jp that has 16 million customers.
Therefore Zend_Service_Rakuten will be used by many Japanese , I think.
Dec 11, 2007
Simone Carletti
It definitely looks more friendly now.
I have a few random feedbacks.
1. method names
I noticed method names doesn't seem to follow an unique guideline.
Some method names originate from Rakuten API name
but other names doens't seem to follow any convention
?> ItemCodeSearch?> GenreSearch?> SimpleHotelSearchI would suggest to define a reasonable convention and follow it for naming all methods.
For instance, according to initial standard the last three methods should be called
2. get vs search
Some search methods uses are prefixed by get keyword while others by search.
Again, I would suggest to find a reasonable convention.
You probably would use search instead of get and reserve the latter for attribute getter methods of an object.
3. Use exceptions when applicable
Looking at use cases I noticed the use of getErrorMessage() to check whether the response is successful.
I personally find this approach a little uncomfortable because requires the developer to test the response against a collection of error messages.
Additionally, it doesn't benefit from Exceptions and object oriented programming.
I would suggest to improve your search method(s) in order to raise an exception when an error occurs and let the developer use a try/catch block to handle the problem.
The developer side code would be something like:
4. _search() and Exceptions
A similar approach to Exception usage (point 3) could be used for _search method.
You may want to change _search method in order to return result object on success and raise an Exception on failure.
Catching the error will be in charge of the end user (developer) as described before and you don't need to perform the following check on each _search() request:
Additionally, this behavior allows you to convert _search method into a static method if you believe this approach fits your needs.
5. helper response method
Changes 3. and 4. provide you the ability to simplify search*() method.
You can define a custom helper to run xpath() and return a normalized result that would be the array of data on success or an empty array if no result is available.
All search method will be simplified to
As I said above, I just wanted to share with you some personal feedbacks.
Feel free to follow or ignore them.
Dec 11, 2007
Darby Felton
Thanks, Simone, for the excellent feedback!
Dec 14, 2007
Satoru Yoshida
Hello, Simone. Thank you for advices. I make some responces to you
about No.1 .
. I name these functions by their definition.
I think these API's name are japanized english
At first, ItemCodeSearch API is described as "This API retrieves item's information by item's code." in the document.
This API does not return more than one items, but only one item specified by the code. So, I use get instead of search in getItemInfo.
At second, GenreSearch does not usually mean "This API returns genre." . In the document, "This API returns name and structure of genre".
Therefore, I name the one of methods getGenreInfo .
At last, SimpleHotelSearch is named to be contrasted with HotelDetailSearch , I think.
But HotelDetailSearch does not search hotel in detail, but returns detailed information about hotel identified by hotel's No.
So, SimpleHotelSearch does not mean search hotels simply.
about No.2
I understand your advice that get would be reserved for attribute getter method.
For example, how about changing into following ?
retrieveItemInfo <-- ItemCodeSearch
Dec 19, 2007
Satoru Yoshida
Hello, Simone. I changed to use exception from getErrorMessage.
And I add new methods as the Rakuten Inc. incleases APIs.
Dec 19, 2007
Simone Carletti
Great!
I'm sorry, I just noticed I didn't answer your previous comment.
Your explanation may appear correct, however IMHO it's quite difficult that an end user will read all the documentation provided by Rakuten and will be able to evaluate it as you did.
He will probably read just the most common steps (if we are lucky, or he won't probably read it at all!) and will try to find a corrispondence between Rakuten names and Zend_Service_Rakuten class.
This is why I suggest to define a close correspondence between method calls and Rakuten API names.
I have a question for you.
Does the following API call has some mandatory arguments?
According to http://translate.google.com/translate?u=http%3A%2F%2Fwebservice.rakuten.co.jp%2Fapi%2Fdvdsearch%2F&langpair=ja%7Cen&hl=en&ie=UTF-8 it seems that Keyword is requested.
If so, I would suggest to move mandatory arguments from $params array directly to method definition.
This will cause PHP parser to raise an Exception at your place whether a mandatory element is not provided.
It seems you already used this technique elsewhere, for instance getItemInfo method.
$code is included in method definition and $params is reserved for optional parameters.
Dec 21, 2007
Satoru Yoshida
Thank you for reading and advicing very quickly!
At first, I agree about that end user may not read all documents.
So, I will change names to useItemCodeSearch (use + API name) or like as searchItemCode.
At second, the code is usually mandatory arguments in the getItemInfo(), but unusually the keyword in searchDvd().
In searchDvd(), one of keyword or genreId is needed.
Do you think it is better to check whether one of arguments is not null?
Dec 11, 2007
Darby Felton
I cannot see that there is any functionality provided by Zend_Service_Rakuten_Abstract (only constants), and it does not appear that any other classes besides Zend_Service_Rakuten would inherit from Zend_Service_Rakuten_Abstract. These things being the case, it seems that the abstract class does not add any value. I would recommend simply having those constants in the Zend_Service_Rakuten class and doing away with the abstract class, or am I missing something?
Another concern of mine is how to change the versions of the web services, when they are updated. Having to modify a class constant to do so is not so good. I understand that the constants could be used to set the default values, but probably there should be another way to change the version values, such as in the following:
The above is just an example; maybe there is a better way.
Probably several of the other values currently stored in constants should be modifiable through the class API, as well.
Dec 19, 2007
Satoru Yoshida
Hello, Darby.
I rewrite this component to be able to specify version.
I added getVersion and setVersion methods.
May 14, 2008
Wil Sinclair
I believe this proposal is at a stage that is most appropriate for our re-defined 'ready for review' section. I will move it there now.
Satoru, this proposal seems relatively mature. Are you still working on it? I would love to see you drive this to inclusion in one of the libraries; it seems to be very much in demand with our Japanese users.
Thanks.
,Wil
May 15, 2008
Satoru Yoshida
Thank you for your comment, Wil. I agree to move this component to the 'ready for review' section.
However, unfortunately, I am not working on this proposals.
If anyone want to work on this, I will be happy.
Satoru.
Nov 27, 2008
Satoru Yoshida
At first, I made APIs correspond from version 1.10 to 1.12.
1) The ItemRanking() is new API.
2) The VacantHotelSearch API request new required parameters.
3) URI format of the DynamicAd API was extended.
At second, I unified several functions.
1)searchGenreParent() and searchGenreChildren() into searchGenre().
searchGenre() requires new parameter, $type.
2)searchVacantHotelRoom() into searchVacantHotel().
searchVacantHotel() also requires new parameter, $type.
At last, I implemented the checking of the required parameters on many functions.
Dec 30, 2008
Ralph Schindler
This component has been accepted for development inside the Extras Incubator.
It appears as though this component has been very well thought out and as such, (along with the popularity of this service within specific regions), it is accepted to the ZendX extras incubator.
There are two concerns I would additionally like to discuss:
Aside from those concerns, please feel free to get this in the Extras incubator to facilitate development.
-ralph
Dec 31, 2008
Satoru Yoshida
Thank you for accepting.
At first, I think you take care of the itemRanking() and the dynamicAd().
If method name can be differ from API name, I have an idea that itemRanking() may be changed to getRanking() and dynamicAd() also may be changed to getAdvertisements().
(Please refer comments from Mr Simone Carletti last year)
At second, the server changes will be shown leftside in http://webservice.rakuten.co.jp/ .
And I will write document how to know the new values of API versions.
For example, we can find the version of the ItemSearch API by looking topside of http://webservice.rakuten.co.jp/api/itemsearch/ .
We can find a string '(version:2008-09-01)' there. The string '2008-09-01' is the value of _apiVer(['ItemSearch']).
And we can find the value of 'api_rws' in bottom side of http://webservice.rakuten.co.jp/document/index.html .
There is explanation of url format, and version of the Rakuten Web Service is shown as following.
'[version]xxxxxxxxxxxxxxxxxxxxxxxx1.12xxxxx' (x is instead of Japanese characters)
The sentence means, '[version] is version of the Rakuten Web Service. The last value is 1.12 now.'
At last, I will be happy if this responce will be useful.
Satoru Yoshida
Mar 18, 2009
Wil Sinclair
Satoru, do you plan to finish this for the 1.8 release?
Mar 18, 2009
Satoru Yoshida
Hello, Wil.
I will finish to make unit tests at May 10th .
Sadly, now I am caught by oci extension trouble from my customer long time.
I should schedule to end more early ?
Mar 19, 2009
Wil Sinclair
Did you mean May or March? We'll probably have 1.8 code freeze in the middle of April.
,Wil
Mar 22, 2009
Satoru Yoshida
Hi, Wil.
I schedule to work from 29/April/2009 to 10/May/2009.
Unfortunately, I am in trouble now.
Satoru Yoshida
May 11, 2009
Satoru Yoshida
Hello,
I will be happy if you will close and archive this .