メルカリでなかなか売れない・・・ そういう時はこれがイチバン

f:id:HelicobacterPylori:20190721150756j:plain

 

やっぱり再出品と価格改定がイチバンでしょう

 

という事でメルカリ再出品ツールの強化版を作りました

先日の記事で少し触れたメルカリ再出品ツール強化版を公開します。
この強化版にはいくつか機能追加をしています。

1. いいね、コメントのある商品は再出品しない
2. 再出品時に価格を下げる
3. 出品済み商品の価格を下げる
4. 出品停止商品の削除
5. 全選択、選択解除
6. 各処理において選択された商品のみ処理する
7. 出品中、停止中商品の一覧や他の情報を表示する

初期版では簡易的な機能のみだったので、こんかいの強化版にはあったらいいなという機能を追加しました。
画面的にも大幅に変えています。商品一覧や出品中、停止中の商品点数などを追加しています。こんな感じ↓

f:id:HelicobacterPylori:20190721151528j:plain

今回もツールを公開します

前回の記事でも書いたように某所では販売できないし、折角作ったのに人に使ってもらえないのはチョットつまらないので公開します。
使ってみてもいいという方は以下からダウンロードしてみて下さい。

メルカリ再出品ツール本体

※今回も使用は全て「自己責任」です。また実行しないとか、PCでメルカリに入れないとかいう諸々の問題も全て自身で解決して下さい。某と違って無償で公開するのでサポートはしません。それでもよければダウンロードして使用してみて下さい。

-------------------- 
気軽にフォローして絡んでください
━━━━━━━━━━
■趣味ブログ「艦これとシノアリスとpythonと」
http://bobtail.xsrv.jp/matome-chanel/prog/
■ネットで見つけたキレイな壁紙を集めてます
http://bobtail.xsrv.jp/wallpapers/
Twitter
https://twitter.com/0kilmoe7

━━━━━━━━━━

 

 

メルカリでなかなか売れない・・・どうすればいい?売るコツは

f:id:HelicobacterPylori:20181223142929j:plain

メルカリ再出品ツールを作りました

 作ったものを、最近CMで見かけるようになった、某ナラというサイトで販売しているという記事を書きました

helicobacterpylori.hatenablog.com

 
まぁ、メルカリはこういったツール類は基本NGなのでアウトかもなぁとか、一応メルカリの提供しているインターフェイスを使って再出品しているのでギリグレーかなとか思いながら出品していました。
ですが、先日ついにココ某から

規約違反だから売っちゃダメ

といった内容の通達が来ました。
そう言われると仕方がないので、今まで売り上げた売上金を全額請求して出品商品(他にもpythonで作っていたツールも売ってました)を全部停止させて、ココナラから引き上げることにしました。(まぁ販売手数料が25%も取られるかなり高めなところなので、ちょっとどうかなと思ってたところだし、丁度良かったかも)

という事で

ツールを公開します

使ってみてもいいという方は以下からダウンロードして下さい。
 
※ただし使用は全て「自己責任」です。また実行しないとか、PCでメルカリに入れないとかいう諸々の問題も全て自身で解決して下さい。某と違って無償で公開するのでサポートはしません。それでもよければダウンロードして使用して下さい。
 

機能強化版も作っている最中でした

某で販売していた時はそれなりに購入してくださる方もいて「やっぱり皆メルカリで売るのに困ってるんだなぁ。需要もあるし強化版作ろうか。」と思って作ってまた販売しようと企んでました。が、引き上げてしまったのでそれも台無しに(´・ω・`)ショボーン
一応、選択式で価格改定や再出品とか商品編集とか出来るようにしようとしてたんですけどね。

メルカリは色々と不便なんですよね

常に出品している人にとっては都度出品した商品が検索上位に上がるのでそこから自身の出品している商品を見てもらえる可能性があるので問題ないけど、普通の人にはそれは難しい。そんなに沢山売るものなんて転売目的でもない限りないと思うのだが・・・
値段を変更すれば検索上位に上がる」という人もいますが、それも面倒だし何度も値下げを繰り返すわけには行かないし、かと言って下げてから上げるわけにも行かない。となると商品を停止させて同じ商品を出品(いわゆる再出品)するのが確実だと思うんですよね。
しかし、自分もそうですけど「そんな暇はない」ですよね。仕事終わった時間や休日に出品しているのに暇もないし、そんな面倒くさいことはやりたくないのが正直なところです。なので

再出品ツールを作った

のです。でもメルカリの指針で「再出品ツールとかの類はダメ」ということでココナラから規約違反だと警告されたので出品をやめて引き上げることにしたのです。

 

【python】メルカリ再出品ツールを作ってみた

もう今では使ったことがない人はほとんどいないんじゃないかと思うくらい浸透しているフリマアプリ。かくいう自分も2,3年前から「メルカリ」を使って売買をしています。主に読み終わった本とか買い過ぎたグッズやらなんやら…
フリマアプリはメルカリ以外にも「ラクマ」「ジモティー」やら沢山あります。いずれラクマとか始めてみようかなぁ

メルカリにしてもラクマにしても、利用者はかなりの人数がいると思います。(ラクマ楽天になってからCMも随分頑張ってるし。)
でも人が多いので買おうと思っていたものがちょっと目を離すと他の人に購入されてしまったりなんてことは良くあることです。
商品を出品していてもすぐに売れると有難いですが、なかなか売れないと商品の管理も大変でさらに、他の人がどんどん出品するので自分の商品はどんどん埋もれていってますます売れなくなっていく始末orz
そうなってしまうと、どんなにものが良くても売れなくなってしまいます。

じゃぁ、どうすれば売れやすくなるか?というとメルカリの場合はいくつか方法があります。
① 「値段を下げる」
これはどういうことかというと、値段を下げると目立つとかいう事ではなく、メルカリでは「約10%下げる」と上位に表示される可能性がある、という事です。でも確実性はないのと本当に10%かどうか?という疑問があります。それに売価が高くない商品は10%も下げてしまうと発送とか手間のほうがかかってしまいます。せっかく売るのなら高く売れる方がいいですよね。
② 「再出品する」
これはそのままですね。既に出品している商品を停止か削除して同じ内容で新たに出品しなおす方法です。これであれば値段はそのままで上位に表示されます。そのかわり新たに出品するので値段を変更するよりも手間はかかります。

正直なところ「どっちもめんどくさい」です。
じゃぁ、どうするか?

「面倒なことは自動化しちゃいましょう」

という事で作りました。
python」+「selenium」で。
あ、メルカリは基本botツール類は非推奨です。使いすぎには注意です。

やっていることは至極単純です。
① メルカリへログイン
② 現在出品中の商品情報取得
③ 出品中の商品を停止して新規出品する
④ ユーザー名とパスワード入力と保存
の4つの処理をやっています。

画面はいたってシンプルです。あとはchromeの画面が表示されるくらいで

左から①→④まで順番にできるようにしています。
出品中の商品情報とユーザー名、パスワードはDBに保存。あと必要な情報(例えばカテゴリとか発送地域)なんかもDBに入れて、出品画面で選択するのに使ったりします。
する事は基本的にクローリングとスクレイピング、それに画面の項目選択と入力のみです。

やっている事は単純なのですが、意外に困ったことがいくつかありました。
取得するのにXPATHで出来なかったり、カテゴリ数が多くて必須項目の組み合わせが多かったりw
あと最後にexe化するんですが、自分はpyinstallerで作成しています。その時に通常の「pyinstaller *****.py -F -w」とかで作成しても実行できなかったんです。で何故かと考えると今回は「selenium」を使っていたので「--hidden-import selenium」のオプションがないと正常に実行ファイルが作成できないという問題が…
この辺りはファイルが出来てから、いざ実行して初めて起きる現象なのでその時にならないと分からない、且つエラーメッセージを見てもよく分からない。という困った問題なのです。ハマるとかなり時間とられますorz

とにかく実行ファイルも出来たので、これで埋もれた商品を再出品して目に留まりやすくなれば売れる確率は上がりますね。
そのうち出品機能とかも追加したいけど、次に作りたいものがあるので後回しですね。

もし、気になった人がいればココナラで販売もしているので見て貰えると喜びます。
購入してもらえると更に喜びます。

 

メルカリ出品補助ツール販売します 他に埋もれて売れにくい?、上位になればワンチャンありますよ

【Python】Python入門②【変数について】

Python入門

自分がPythonを学習し始めて数か月が経ちました。最初はAIとか機械学習とか面白そうと思って学習し始めたのですが、クローリングとスクレイピングに興味がわき前回作ったようなヤフオク落札履歴検索ツール【Python】ツールを作ろうとしたらエラーが出たのでAnaconda+Pycharmで環境を再構築した話やら記事にはしてないけどTwitterで特定ユーザーのフォロワーをフォローするツールを作ったりしてました。 ある程度クローリング&スクレピングの技術はそこそこ使えるようになったので、今まで学習したことを忘れた時の為や、誰かが学習する時に役に立つ様に基本からアウトプットすることにしました。内容は学習するときに買った本を基に作成します。

 

変数について

Pythonにも例によって変数というものがあります。「変数」とはPCのメモリ上に一時的にデータを記憶しておく為の入れ物のようなものの事です。数値や文字に限らず画像や映像、音声など様々なデータを記憶することが出来ます。
 
 

変数を使うには?

Pythonで変数にデータを記憶するには「変数名 = 値」と記述します(よく変数を定義すると言います)。プログラム上では以下のように書きます。
price = 1200  # ← 変数「price」に1200を代入
print(price)  # ← 変数「price」の値を参照し画面に出力

この様にすることで変数に値を代入することができます。 変数名にはアルファベット(aからz、AからZ)数字(0から9)アンダースコア(_)に加えて、漢字やひらがな・カタカナギリシャ文字が使えます。ただし、数字から始まる変数名は使えません。 ※基本的に変数名はアルファベット、数字、アンダースコアのみを使用します。これはPythonマルチプラットフォームで動作するため、WindowsmacOSLinuxなど異なるプラットフォームでは漢字コードが異なる為、漢字などの全角文字を使うと意図しない漢字になる(文字化けとも)のでアルファベット、数字、アンダースコア等の半角文字を使用するのが通例となっています。

文字種類 実際の文字 利用例
アルファベット a~z、A~Z price、point
数字(2文字目以降) 0~9 plan3、test1
アンダースコア _ orange_price、a_pt
漢字・ひらがな・カタカナ 漢字、あ~ん、ア~ン 値段、ポイント
ギリシャ文字 αβσ α、β

 

使う事の出来ない変数名

  1. 数字で始まる名前
  2. アンダースコア(_)から始まる名前
  3. 予約語
アンダースコアから始まる名前は特別な用途で利用されることが決まっています。文法的には使用できますが、基本的に使用しないように注意してください。
予約語についてはforやifなどPythonの命令として使われている語句があり、これらは変数名として使用することが出来ません。これには以下のような語句があります。
 
False calss finally is return None continue
for lambd try True def from nonlocal
while and del global not with as
elif if or yield asset else importpass
break except in raise      
 

変数を使うと分かりやすくなる

ところで、なぜ変数をつかうのでしょうか?変数を使うとプログラムを分かりやすくできます。数字だらけだったプログラムに意味を与えることが出来ます。 例えば自動車で東京から大阪まで何時間かかるかを計算して表示するプログラムがあるとします。これを変数を使わないで作ると以下のようになります。 速度は時速80km、距離は507.5kmとします。
#東京から大阪まで何時間?
print(507.5 / 80)
表示するだけなので1行で済みますが、これではなにをしたいのかが分かりません。さらに時速60kmの場合、時速100kmの場合や大阪ではなく、広島や福岡など目的地が変わった場合等、変更箇所が分かりにくいです。 簡単なプログラムではマシですが、大きなプロジェクトになるとそうはいきません。変数の数も求める結果も、もっと複雑で大きなものになります。その時に例のようなプログラムでは汎用性もなく対応も取り切れません。 この例を変数を使うと以下のようになります。
#東京から大阪まで何時間?
kyori = 507.5
jisoku = 80
jikan = kyori / jisoku
print(jikan)
この様に長くなりますが、それぞれの値が何を指しているか分かりやすくなりました。距離が変われば「kyori」の値、時速が変われば「jisoku」の値を変えればいいという事がパッと見で分かるようになりました。
 

変数の有効期限

ところで、一度変数に代入された値はいつまで使う事が出来るのでしょうか? 勿論、プログラムの終了までは使う事が出来ます。しかし、変数にはスコープと呼ばれる有効範囲というものが存在します。まだこの時点では意識する必要はないでしょう。ただ、スコープと呼ばれるものがあるという事だけは覚えておいてください。

【Python】Python入門①【Pythonって何?】

 

Python入門

f:id:HelicobacterPylori:20181103123503j:plain

自分がPythonを学習し始めて数か月が経ちました。最初はAIとか機械学習とか面白そうと思って学習し始めたのですが、クローリングとスクレイピングに興味がわき前回作ったようなヤフオク落札履歴検索ツール

helicobacterpylori.hatenablog.com

やら記事にはしてないけどTwitterで特定ユーザーのフォロワーをフォローするツールを作ったりしてました。 ある程度クローリング&スクレピングの技術はそこそこ使えるようになったので、今まで学習したことを忘れた時の為や、誰かが学習する時に役に立つ様に基本からアウトプットすることにしました。内容は学習するときに買った本を基に作成します。

 
Pythonって何?どんな言語?
ここを見るような人には既知の事だと思いますが、Pythonオープンソースフリーのプログラミング言語です。フリーなので誰でも環境をインストールして開発、配布することが出来ます。 ※配布するときは著作権には注意しないと大変なことになるので気を付けて下さい。

 

汎用性が高い言語
プログラミング言語と言っても色んな種類があります。昔からあるC言語や日頃お世話になっているAndoroidアプリを作っているJava、Webページを表示するHTMLやJavaScriptiPhoneアプリを作っているObjective-C等々、目的や用途によって実に様々な言語があります。
そんな中でPythonが出来ることは沢山あります。Webアプリからデスクトップアプリ、バッチ処理、ゲーム、IoT、ロボット、科学計算、人工知能機械学習ディープラーニングとホントに出来るのかと思うぐらいの数があります。 個人的にはデスクトップアプリかバッチ処理クローラー人工知能機械学習といった事に使われるのが多いかと思います。 その類の本は沢山あるので目にする機会はあると思います。

 

そんなPythonは「スクリプト言語」(本によっては「インタプリター言語」とも)という種類に分けられます。これはプログラムを作成するとそのまま実行することが出来るという特徴があります。逆にそのまま実行できない(アプリケーション(実行ファイル本体であるexeファイルの事)を作成する必要がある)言語もあります(コンパイラ型言語と言います)。※Pythonはアプリケーションを作成して実行することも可能です。

また、Pythonマルチプラットフォーム対応言語なのでWindows/macOS/Linuxなど、さまざまなOSやプラットフォームで動作させることが出来ます。

 

Pythonオブジェクト指向言語に分類されます。最近のプログラミング言語ではこの「オブジェクト指向」という言葉がよく使われます。ではオブジェクト指向というのはどういったものなのかという事になります。 オブジェクトとは「もの」の事を指します。「もの」とは現実ではスマホであったりPCであったり、食べ物、飲み物など様々なものの事を指しますが、オブジェクト指向では「もの」とは「プログラムの対象」というすごく抽象的なことを指します。 wikiではこのオブジェクトの事を以下のように記述してあります。
関連するデータを束ね、代入、演算、手続き(関数やメソッドなど)を介した受け渡しといった操作の対象にでき、またメッセージの受け手になれる実体をオブジェクトと呼ぶ。

なかなかイメージするのが難しいかと思います。プログラム上で使う大抵のものはオブジェクトだと思ってもあながち間違いではないと言えます。 それぞれのオブジェクトはデータ処理という属性(アトリビュートを持っています。データの事を「プロパティ」処理の事を「メソッド」と呼びます。 例えば、RPGゲームの主人公で考えると「HP」「MP」「STR」などのステータスはプロパティ、「移動する」「話す」等の行動はメソッドと言えるかもしれません。 さて、それではそのオブジェクトはプログラム上ではどういった感じでしょう。

 

■クラスとインスタンス

クラスは「雛型」、インスタンスは「クラスの実態」と考えることが出来ます。先述のRPGゲームの主人公に置き換えると、クラスは「プレイヤーがプレイする前の状態」、インスタンスは「プレイを始めて操作する主人公」といった感じでしょうか。 プログラム上ではクラスをインスタンスしてそれを扱います。

クラスの中には例えば「HP」「MP」「STR」などのステータスもプロパティとして存在し、「移動」「話す」といったメソッドも存在します。

プログラムで扱うオブジェクトは全てがクラスをインスタンス化したオブジェクトを扱います。クラスそのものを扱うことはありません。

 

■継承

オブジェクト指向言語のメリットとして「継承」という機能があります。これは既に作成済みのクラスを再利用してあらたなクラスを作成することです。再利用することで同じ様な機能を持つ別のクラスを楽に作ることが出来ます。

例えばRPGゲームだと街中の村人や店員など同じ状な動きをするキャラクターは多く存在します。それらは共通の動作を別に作成し、継承という形で再利用することで開発やメンテナンス等を楽に出来るようになります。

継承元のクラスを「スーパークラス」、継承先のクラスを「サブクラス」と呼びます。 

 

ざっくりとした説明ですがPythonはこんな言語です。 これを読んでPythonってこんな事ができるんだとか、こんな言語なんだというのがなんとなくでもいいので感じて貰えると嬉しいかなと。

【Python】ツールを作ろうとしたらエラーが出たのでAnaconda+Pycharmで環境を再構築した話

 


◆経緯

最近新しいタブレットが欲しいのだけど、新商品で手頃なのがなくて中古でどのくらいだろうという疑問から新しくツールを作ることにした。ヤフオクで落札されている相場がいくらかというのをピックアップするツールを作ることに。 そんなこんなでツールを作ってpyinstallerを使ってexeファイルを作ろうとするとなぜかエラーがでるΣ(゚д゚lll)ガーン(開発環境では問題なく動作してるのに…)

 

◆経過

こういうことは珍しいことではないので対応を調査することに。 出ているエラーは「module not found matplotlib」というもの。どうやら「matplotlib」というグラフ描画に使っているモジュールがないらしい。 ちゃんとプログラム上ではimportしてるんだけど、exeファイルを作る時に上手くいかないっぽい。結局理由は良く分からないがexeファイルを作る時にオプションで「--hidden-import matplotlib」をつけることで問題ないらしい。 意外とあっさり解決方法が見つかり、早速実行して終了だと意気込んでpyinstallerを実行したが結果は同じで「module not found matplotlib」が出る始末orz 何故だ!? ( ゚д゚)ハッ! 「--hidden-import matplotlib」じゃなくて実際importしている「--hidden-import matplotlib.pyplot」なのか?と考えたので変更して再実行。 が、やはり同じorz この時点で既に数時間経過・・・ 色々調べたが結局対応が分からず、次の日に 「もしかして、環境が古いのか、おかしいのかどっちかなのか?」と思い確認。 すると「Anaconda 3.6.3」、「Anaconda3.6.4」、「Python3.6.6」の3種類が同居している状況に「もしかしてこのせいか??」と思い環境を再構築することに・・・ 一旦、2種類のAnacondaとPython、開発環境のPycharmを全てアンインストールして1から再インストールすることに。 最新版のAnacondaとPycharmをダウンロードしてそれぞれインストール。この時点で半日以上経過ww 更に既に作っていたPycharmのプロジェクトも新しいのを作り直して、再びPyinstallerでexeファイルを作成・・・・・ やはり「module notfound matplotlib」は出るので「--hidden-import matplotlib.pyplot」で再度実行。 ・ ・ ・ 今度は違うエラーが発生「UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 129: invalid start byte」どうやらutf-8エンコーディングが指定されていないっぽい。 あれ?他のツールを作ったときはそんなの必要なかった気がするぞ・・・まぁ必要らしいので先頭行に

# coding: utf-8

を追加。再々pyinstaller実行。 ・ ・ ・ またエラー発生(そろそろ勘弁してww) 「RuntimeError: maximum recursion depth exceeded while calling a Python」 正確にこのメッセージだったか覚えていないがこんな感じのエラーが発生。 今回はpyinstaller実行時のspecファイルを修正 2行を先頭に追加

import sys
sys.setrecursionlimit(5000)

またpyinstallerを実行。 ・ ・ ・ やっとエラーがなく処理終了(≧▽≦) よし、動作確認だ! キーワードを入力して、検索Go!! ・ ・ ・ あれ、なんだこれ、こんなメッセージはだしてないぞ、エラー!? 「This application failed to start because it could not find or load the Qt platform plugin "windows" in "".」 もういい、今日はこれで終わり!!(ノД`)・゜・。   次の日・・・ pluginがないとかなんとからしいがよくわからんのでググる

とりあえず必要なdllをexeと同じフォルダに入れることで解決しました。 - \platformsをexeの入ったフォルダの/dist以下にコピーする。 - C:\Users\{YOUR_USERNAME}\Anaconda2\lib\site-packages\PyQt5内のlibEGL.dllを/dist以下にコピーする。

との事なのでコピーして、何度目か分からないpyinstaller実行。 問題なくexeファイルは出来たので検索Go!! ・ ・ ・ 「検索 終了!!」 おし!やった。 正直、一難去ってまた一難、ぶっちゃけありえないって感じでしたww  

 
◆結果

完成したツールはこんな感じです。 検索キーワードと遡る日数を入れて検索するとヤフオクの落札履歴から該当する物のみを一覧表示させます。 該当件数、最高値、最安値、中央値、平均値、最頻値、各商品の詳細、ヒストグラム、折れ線グラフを出力します。

f:id:HelicobacterPylori:20181103122211j:plain

ヒストグラム、折れ線グラフで金額帯での落札数と折れ線グラフで日時での落札額のグラフを表示し、落札時の参考になるはずw

f:id:HelicobacterPylori:20181103122329j:plain

商品の詳細をCSV出力出来るので、Excelで何かしようとする事も可能です!! という事で「ツールを作ろうとしたらエラーが出たので環境を再構築した話」でした。

 

 

気になったらここで販売もしているので見てみてください。購入してもらえると感謝します。 ヤフオク落札履歴を抽出するツールが使えます 販売、落札したい商品の適正価格がいくらか事前に知りたい方に