cybacchus

映画、CG、プログラム等

2016年6月29日水曜日

.net でwsdlを参照時、クライアント側実行時に配列エラーで落ちる時の対処

状況

WSDLを使用して.netのWEB参照でクライアントクラスを作成すると、コンパイルは通るが、実行時に落ちる。

原因

通常のWEB参照を使ってWSDLからクライアントクラスを作った場合、XSD上で
下記のように、1要素のなかで maxOccursにunbounded指定がある場合
解釈の仕方が異なる(二次元配列に変換される)ため。

対処

上記のような要素がある場合は、無理やりダミー要素をつっこんだ下記のようなXSDを作成する。
  
  
ダミー要素を突っ込むことで、解釈は同一になり、 かつダミー要素は使用しない(サーバー側ではうけとらない)ので 問題は発生しない。 その上で、下記手順により直接WSDLコマンドをたたいてクライアントクラスを作成する。

  1. WSDL、修正したXSDファイルをネット参照できる場所に置く  (今回はドロップボックス利用。ローカルでもできるのかもしれないがうまくWSDLコマンドが動作しなかった)
  2. コマンドプロンプトを開く
  3. cd C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools   場所は、WSDL.exeのある場所。バージョンによって   C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin   等異なる。
  4. wsdl /language:VB /out:Reference.vb /namespace:OrderApi https://dl.dropboxusercontent.com/u/71006786/RakutenSsdl/r.wsdl  のように、コマンドをたたく(ドロップボックスの部分は1でおいた場所)
  5. できあがった、Reference.vbをプロジェクトに取り込んで使用。

補足 

余計なファイルが作成されず、セッティングファイル(Settings.settings)の変更もされないので 今回のような修正が発生する場合にかぎらず、wsdlを使用する場合はこのやり方のほうが シンプルで良い気がする。

某ショッピングモールのAPI変更に伴い修正を行う際、これがおこりかなり苦しんだ・・・。しかも同タイミングで、このモールは.netのサポートをやめている。これも原因のひとつなのかもしれないなー・・。

2016年3月2日水曜日

PHP7にしたらRedefinition of parameter   


先日MWSを使用した実行環境のPHPを5.6系からPHPを7にあげたら
アマゾンの提供するソースのほうの
MarketplaceWebServiceProducts\Model\ResponseHeaderMetadata.php on line 31
Redefinition of parameter $quotaMax 
のエラーがでた。

PHP5.6系だと機嫌よく動いてるので、原因は仕様変更なんでしょう。
教えてグーグルさんと検索すると、
「DQNEO起業日記」というブログにいろいろ詳細乗っており、
http://dqn.sakusakutto.jp/2015/07/php7_trap.html
そこに
「関数のパラメータで同じ変数名を2回書いたらエラーに」
という記述がありました。

いまいち僕は、そもそもこういうことをやる理由がわかりませんが
(ブログ筆者も深淵な理由と記述)
とりあえずもう使えないということで
該当箇所の
 
public function __construct($requestId = null, $responseContext = null
  , $timestamp = null, $quotaMax = null, $quotaMax = null, $quotaResetsAt = null) {
を
public function __construct($requestId = null, $responseContext = null
  , $timestamp = null, $quotaMax_1 = null, $quotaMax = null, $quotaResetsAt = null) {
な感じで適当な名前に変更して難を逃れました。

DQNEOさんありがとう!

2016年2月21日日曜日

作業メモ「MWS」で SSL certificate problem と怒られる

PHPでMWSを使ってみようと思い。
とりあえず、公式サイトからサンプル落としてきて
セラーIDやら、トークンやら各種パラメータをセットしてみる。

おりゃっと、ブラウザからサンプルをキックするが
なんかエラー。
SSL certificate problem
え!そんな公式サンプルやのにーなんで!とか思いながら
つらつらと調べると
海外のフォーラムに回答ありました。
https://sellercentral.amazon.com/forums/thread.jspa?messageID=3062943

ということで、サンプルソースを降りてゆくと
Client.php
というファイルにいますいます
CURLOPT_SSL_VERIFYPEER の設定が。
で、
setSSLCurlOptions の
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
の3っつ目の引数をfalse
にすると、動きました!

とりあえず、進めてよかった。

2016年1月15日金曜日

使えるWEBサービス⑤「PDF to Excel Converter」 


様々な文書を変換できるサービスに
https://smallpdf.com
というのがあります。

PDFの圧縮を行う「Compress PDF」
パワーポイントからPDFへの変換を行う「PPT to PDF」
PDFからパワーポイントの変換を行う 「PDF to PPT」
JpegイメージからPDFへの変換を行う 「JPG to PDF」
PDFイメージからJpegへの変換を行う 「PDF to JPG」
ExcelファイルからPDFへの変換を行う 「Excel to PDF」
PDFファイルからExcelへの変換を行う 「PDF to Excel」

WordファイルからPDFへの変換を行う 「Word to PDF」
PDFファイルからWordへの変換を行う 「PDF to Word」

PDFファイルのマージを行う 「Merge PDF」
PDFファイルの分割を行う 「Split PDF」
PDFファイルの回転を行う 「Rotate PDF」

PDFファイルのロック解除を行う 「Unlock PDF」
PDFファイルのロックを行う 「Protect PDF」


等至れり尽くせりで、
(一部PDFへの変換に関しては、PDF印刷で済むので不要な感はありますが・・)
ほとんどのフォーマットを変換できる上に
とりあえず単発で使ってみる感じなら登録も不要で、かつ無料で使用できます。


特に私のお気に入りは、PDFをエクセル化する

「PDF to Excel Converter」 
https://smallpdf.com/jp/pdf-to-excel
で、

どういう理由でかわかりませんが
コピペすると無茶苦茶な順番になる表のあるPDFファイルなどをもらった時などは
これでOCRのようにエクセル化してしまったほうが
ちゃんとしたデータとして使えます。

なぜか門構えの漢字が文字化けするという欠点はありますが、
今のとこそれ以外はほぼほぼ完全な変換をしてくれてます。

コピペできない、ぐちゃぐちゃなPDFを変換の際は
是非使ってみることをお勧めします。