カテゴリー別アーカイブ: C#

ヤフオク 終了したオークションの再出品ツール作成メモ Selenium編

< 目的 >

落札者のありなしに関わらず、自動再出品の回数も消化して終了となったオークションの再出品を行う。
管理は社内PCに限りたいとのことで、クラウド型の管理ツールは使用不可。
「○○にて出品」といったようなツール名称が入るのもNGの理由らしい。
APIの提供は2018年2月で終了している。そもそも出品関連のAPIはなかった模様。

 

< 必要なもの >

・ヤフオクとのストア契約
・Yahoo!IDとパスワード

 

< 手順概要 >

APIの提供がないので若干力業的なところあり。

「マイ・オークション」の「出品終了分」内「落札者あり」または「落札者なし」のページを開く
ログインページに遷移してしまったらログインする
「落札者あり/なし」のHTMLを取得
オークションIDやリンク、タイトル、再出品ボタンのリンク先URLを収集
再出品ボタンのリンク先URLに移動して再出品処理

 

< 詳細 >

VisualStudioの該当プロジェクトに対するSelenium.WebDriverの導入は済んでいて、ブラウザごとのドライバはプログラム本体がある場所に SeleniumDriver というフォルダを作りそこに保存する、という前提。

 

もしログインされていない場合やセッションが切れていたりするとログイン画面に飛ばされるので、その際にはログインする。
ただし、状況によっては画像認証が必要となることがあるため、そのページでは60秒間待つ。
その間に手動で画像認証を行う。

 

落札者あり/なしのページが開いたらHTMLを取得し、必要な情報を収集する。

※ここではオークションIDしか取得していないけど、本来はURLなども対象。

 

再出品ボタンのURLに遷移して出品処理を行う。

尚、終了時間や自動再出品の回数などを再設定したいという要望もあったので、そのような作業も含めている。
aucEndTimeStringやautoReUpNumが該当するが、再出品に当たって共通して他にも再設定したい項目などがあればここで作業。

 

ところで、こうした自動化について回るのは「クリックしたい要素が出ていないのに処理が先に進んでしまい思う通りの動作をしない」ということがある。

今回もIEでは問題ないけどChromeだとそうした状況が発生した。

そこで、ドライバのインスタンスに対して下記のような設定を行うとタイムアウトまでの時間を変更できる。(デフォルトでは0だったような・・・)

 

 

楽天API 楽天ペイで受注情報の取得についてメモ

< 目的 >

特定の注文詳細データを取得する。
ex)ステータスが「発送待ち」となっている受注分から商品名(IDや管理番号なども)を取得したい
ex)ある一定期間内で「あす楽」の受注件数を取得したい

 

< 必要なもの >

・店舗URL
・serviceSecret
・licenseKey

 

< 手順概要 >

認証キー(AuthKey)の作成
リクエストパラメータをJSON で作成
エンドポイントにリクエストを投げる
レスポンスもJSONなので望むように処理

 

< 詳細 >

まずはserchOrderを使って受注番号を取得する。
デフォルトでは30件しか取得できないので、下記でリクエスト用のクラスにて件数を最大の1000件に変更。

認証キーの作成

 

リクエストパラメータをJSONで作成
パラメータは別途パラメータ設定用のクラスを用意。日付はUI上にデータピッカーをおいて設定。

尚、パラメータは下記のようなイメージでクラスを用意しておく。

 

エンドポイントにリクエストを投げる

 

受け取った結果もJSONなので、今回はデシリアライズしてオブジェクトにする。

デシリアライズのためには下記のようなクラスを用意。

 

SearchOrderResponseクラスのorderNumberListに最大1000件分の受注番号が取得できるので、次はその受注番号を使って受注情報を取得する。

受注情報の取得も基本的な手順は同じなので、「認証キー(AuthKey)の作成」「リクエストパラメータをJSON で作成」「エンドポイントにリクエストを投げる」「レスポンスもJSONなので望むように処理」で作業を行う。

尚、受注情報の取得にはgetOrderを利用するが、serchOrderは最大1000件の受注番号リストを取得できるのに対して、100件までとなっているので、対象の受注番号を絞り込む必要も出てくるかと。

 

Jelly Pro で バーコードリーダー

最近のスマホはどれも大きくなる一方で小さいものがなかなかない。

普段使いでは今使ってる502SHの5.3インチがちょうど片手で操作しきれる最大サイズで何をやるにしても便利だけど、一部用途で4インチ以下が欲しくなり、探してみたところ辿り着いたのが 「 Jelly Pro

◇製品ページ
https://www.unihertz.com/ja/jelly.html

◇メーカートップページ
https://www.unihertz.com/ja/

◇日本公式ツイッター
https://twitter.com/UnihertzJapan

◇本国ツイッター
https://twitter.com/unihertz

尚、2017年12月31日時点で技適は取得されていないので、日本国内ではWi-FiやBluetoothは使用できない。
とはいえ、メーカーが日本の技適取得に向けて動いてはいるみたいなので、そのうちアップデートされて技適マークが表示されるようになるかも?

 

さて、そんなJellyProですが、もう箱からして小さい。
502SHと並べても(厚みはともかく)一回り大きい程度。

 

中を空けると、本体の他にはUSBケーブルと液晶保護フィルムと青いブーメラン。
このフリスビーのようなブーメランのような、ギターのピックのようなものでJellyProの’裏蓋を外す。
その裏蓋、固い固いとネット上では言われてたけど、確かに固かった。
また、以前はUSB-ACアダプタも付属していた?ようだけれど、今は省略されいる。

 

もう一度502SHと比較。
ホント、小さい。

 

裏蓋には「Open Here」と親切に開け口が案内されている。
もちろんこれはシールなのですぐに剥がしてしまうけど。

 

裏蓋を外すと・・・
これもよくネットで見かけたけど、
「バッテリーは本体に入っている。しかも袋にくるまれて」
という状態。

「バッテリーが入っていない!」とか「USBケーブルつなげても充電しない!」という記載が見られるのはこれを見逃しているからなのだとか。

 

そしてこのバッテリー950mAhなので、あまりゴリゴリ使うようだとそれほど保たない。
しかも、代替えとなるバッテリーも今のところないので、モバイルバッテリーがひとつあると安心でしょう。
最近はスマホ用にモバイルバッテリーを持ち歩くことも多いので、それで兼用しても950mAhくらいなら問題もないと思うので。

 

さて、一通り開封と設定が終わったところで、当初の目的のバーコードリーダー化。

バーコードを読むに当たって何か最適なアプリがあれば良かったんだけど、なかなか見つからないので自作。
(アプリそのものは豊富だけど、高機能すぎたり重かったり動かなかったりで・・・)

コードは下記のような感じで、ZXingというライブラリの ZXing.Net Mobile を使うのがどうやら定番らしい。

 

これを Jelly Pro で実行すると・・・

こんな感じで読み込めます。
※今はまだ読み込むだけ。あとで実務に合うよう処理を追加する予定。

そして、横向きでも使えます。
端末が小さいので、縦向きよりも横向きの方が捉えやすい。

それにしても、認識の速さは想像以上。
しかも、赤いラインからバーコードが多少外れてていても問題ない。
(おかげで撮影は面倒だったけど・・・)

これで棚卸しが少し楽になるかな。

AmazonのFBAへの納品も、商品選定→JAN読込を繰り返して梱包箱が一杯になった等、作業の区切りでそのリストをPCに取り込み、納品プランの作成に持っていけば納品ミスもなくなるだろうし。

 

バーコードリーダー自体は安いのだけれどパソコンが必要だし、かといって単独で使えるハンディターミナルとなると高いし汎用性がない。

JellyProならAndroid7.0だし、手のひらサイズだし、スマホだし、求めていた用途をかなり満たしてくれる1台になりそうだ。

C#、ネットワークドライブ存在チェックの不思議

ちょっとメモがてら。

Yドライブをネットワークドライブとして割り当てている。
アドレスを仮に 192.168.100.1 とする。
割り当てられているフォルダは \\192.168.100.1\common ということで。

この時、C#でディレクトリの存在をチェックを行うと、

は Ture

しかし、

は False

ここまではいい。納得。
 
 
そこで次に、前回のエントリでやってみたC#で作ったDLLをExcelから使えるようにしてみたケースで試してみる。

DLLは下記のような単純なコード。

これでExcelのVBAで下記のようにすると True が返ってくる。
Cドライブなので納得。

そして、下記のようにすると・・・

やはり True が返ってくる・・・
(違いはCheckDirectory内の文字が C か Y かだけ)

もちろん、他の未使用のドライブレターで試すとFalseが返ってくる。

Yドライブはネットワークドライブで Directory.Exists(@”Y:\”) ではFalseとなるのに、なぜこの場合はTrueと返ってくるのか・・・

用途としてはこの方が助かりはするけれども。
 
 
 

Excelで使えるDLLをC#で作る

せっかくC#を多少使えるようになってきたので、これまでExcelのマクロ(VBA)で作っていたものをDLLにしてみることに。
というのも、VisualStudioが優秀すぎてこっちで作る方が楽なので。
 
 
早速、VisualStudioを立ち上げるわけですが、今回の目的上、管理者として実行する必要がある。


 
 
次に、適当にプロジェクトを新規作成し、下記の通り設定。
 
まずはプロジェクトのプロパティを開いて、「アセンブリ情報」をクリック。


 
 
 
新たにウィンドウが開かれるので、そのなかの「アセンブリをCOM参照可能にする」にチェックを入れて「OK」


 
 
 
次は「ビルド」の項目へ移り、その中の「COM相互運用機能の登録」にチェックを入れる。


 
 
 
これで下準備が完了したので、下記のようなクラスを適当に作ってみる。
この時、
using System.Runtime.InteropServices;
を追記するのを忘れないように。
 

ポイントとしてはインターフェースの実装(7行目から)とクラスに属性を設定する(14行目)こと。

これをビルドすればDLLのできあがり。
 
 
出来上がったDLLはRegAsmを使って登録する必要があるので、DLLの置かれているディレクトリで下記を実行。

尚、登録を解除するには下記のようにする。

尚、regasm.exeは「v4.0.3019」のほか「v2.0.50727」にもある。
対象のフレームワークのバージョンに合わせる必要があるらしいが、敢えて古いものを作ることもあまりないと思うので、今回はそのまま最新のものを使用。
 
 
 
ここからはExcelでの作業。
 
 
Excelを開いてVisualBasicEditor(VBE)を立ち上げる。


 
 
VBEのメニューから「ツール」→「参照設定」と進む。


 
 
その中に「ExcelVbaExtension」とDLLの名前が出ていればOK。


 
 
あとは下記のようにすれば使えるようになる。
(これだとシートがアクティブになる度にメッセージボックスが出てきて面倒なだけだけど・・・)

 
 
こんな感じにね。