ABLE.net の VPS で、WEBサーバを構築する手順です。
1. インストール
$ sudo apt-get install nginx uwsgi uwsgi-plugin-python python-pip
2. ポートを開く
$ sudo ufw allow 80
3. Nginx の設定
デフォルトのサイト設定を削除しておきます。
$ sudo rm /etc/nginx/sites-enabled/default
設定ファイルの例です。
FILE: /etc/nginx/conf.d/<サイト名>.conf
--
server {
listen 80;
server_name <サイトURL>;
location / {
uwsgi_pass unix:/tmp/<サイト名>.sock;
include uwsgi_params;
}
}
--
※ UNIXソケット(.sock)で、uWSGI に連結します。
再起動しておきます。
$ sudo service nginx restart
4. uWSGI (emperor) の設定
必要なディレクトリを作成します。
$ sudo mkdir -p /etc/uwsgi/vassals
$ sudo mkdir -p /var/log/uwsgi
設定ファイルです。
FILE: /etc/init/uwsgi.conf
--
description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]
respawn
env UWSGI=/usr/local/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log
exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --logto $LOGTO
--
emperorモードで起動し、/etc/uwsgi/vassals の iniファイルを監視します。
$ sudo service uwsgi restart
5. Django の動作確認
virtualenv 環境に、Django を入れます。
$ cd
$ virtualenv venv
$ cd venv
$ source bin/activate
$ pip install Django
$ django-admin.py startproject mysite
$ cd mysite
$ deactivate
6. uWSGI 設定ファイル
Nginx から uWSGI に連結する為に、iniファイルを作成します。
設定ファイルの例です。
FILE: /etc/uwsgi/vassals/<サイト名>.ini
--
[uwsgi]
# Variables
base = /home/<ユーザ名>/venv
app = <サイト名> # Djangoのデフォルトは、mysite
# Generic Config
home = %(base)
chdir = %(base)/%(app)
module = mysite.wsgi
socket = /tmp/%n.sock
chmod-socket = 666
py-autoreload = 1 #reload on change python file
plugins = python
--
7.まとめ
全体の繋がりは、以下の通り。
WEBアクセス -> Nginx -> uWSGI -> Django
複数のサイトを動かす場合は、
・Nginx の <サイト名>.conf
・uWSGI の <サイト名>.ini
・アプリケーション(Django等)
を準備します。
2016年1月21日木曜日
Ubuntu14.04 + Nginx で、画像のリサイズを行う。
こちらの続きです。
http://yamayoshi.blogspot.jp/2013/05/ubuntu1204-nginx.html
やりたいこと。
・任意のサイズを指定
・任意のアドレスを指定
元の画像: http://<アドレス>/<パス>/<ファイル>
↓
リサイズ: http://<変換サーバのアドレス>/g<サイズ>/<アドレス>/<パス>/<ファイル>
1.インストール
$ sudo apt-get install nginx
2.設定
FILE: /etc/nginx/conf.d/<app>.conf
--
server {
listen 80;
server_name www.example.com;
resolver localhost;
location / {
uwsgi_pass unix:/tmp/<app>.sock;
include uwsgi_params;
}
location ~ ^/g(?P<size>[^/]+)/(?P<url>[^/]+)/(?P<file>.*)$ {
rewrite ^ /crop last;
}
location /crop {
image_filter crop $size $size;
proxy_pass http://$url/$file;
add_header Nginx "$size $url $file";
}
}
--
ちょこっと説明
> location ~ ^/g(?P<size>[^/]+)/(?P<url>[^/]+)/(?P<file>.*)$
→ サイズ、アドレス、ファイル(パスを含む) の情報を取り出して、変数に格納します。
> image_filter crop $size $size;
→ 変換サイズを指定
> proxy_pass http://$url/$file;
→ 元の画像ファイルを指定
> add_header Nginx "$size $url $file";
→ おまけ(HTTP_HEADERに変数を出力し、Chrome開発ツールで確認。)
3.起動/停止
$ sudo service nginx stop … 停止
$ sudo service nginx start … 起動
4.動作確認
ブラウザから、
http://www.example.com/g160/3.bp.blogspot.com/-qn0m7KScp4A/TsTyX4cO5FI/AAAAAAAAANA/ooqc_7cGnis/s1600/NEC_0025.JPG
にアクセスすると、
http://3.bp.blogspot.com/-qn0m7KScp4A/TsTyX4cO5FI/AAAAAAAAANA/ooqc_7cGnis/s1600/NEC_0025.JPG
のサムネイル画像を表示します。
キャッシュを使う場合は、前回の記事を参考に。
http://yamayoshi.blogspot.jp/2013/05/ubuntu1204-nginx.html
やりたいこと。
・任意のサイズを指定
・任意のアドレスを指定
元の画像: http://<アドレス>/<パス>/<ファイル>
↓
リサイズ: http://<変換サーバのアドレス>/g<サイズ>/<アドレス>/<パス>/<ファイル>
1.インストール
$ sudo apt-get install nginx
2.設定
FILE: /etc/nginx/conf.d/<app>.conf
--
server {
listen 80;
server_name www.example.com;
resolver localhost;
location / {
uwsgi_pass unix:/tmp/<app>.sock;
include uwsgi_params;
}
location ~ ^/g(?P<size>[^/]+)/(?P<url>[^/]+)/(?P<file>.*)$ {
rewrite ^ /crop last;
}
location /crop {
image_filter crop $size $size;
proxy_pass http://$url/$file;
add_header Nginx "$size $url $file";
}
}
--
ちょこっと説明
> location ~ ^/g(?P<size>[^/]+)/(?P<url>[^/]+)/(?P<file>.*)$
→ サイズ、アドレス、ファイル(パスを含む) の情報を取り出して、変数に格納します。
> image_filter crop $size $size;
→ 変換サイズを指定
> proxy_pass http://$url/$file;
→ 元の画像ファイルを指定
> add_header Nginx "$size $url $file";
→ おまけ(HTTP_HEADERに変数を出力し、Chrome開発ツールで確認。)
3.起動/停止
$ sudo service nginx stop … 停止
$ sudo service nginx start … 起動
4.動作確認
ブラウザから、
http://www.example.com/g160/3.bp.blogspot.com/-qn0m7KScp4A/TsTyX4cO5FI/AAAAAAAAANA/ooqc_7cGnis/s1600/NEC_0025.JPG
にアクセスすると、
http://3.bp.blogspot.com/-qn0m7KScp4A/TsTyX4cO5FI/AAAAAAAAANA/ooqc_7cGnis/s1600/NEC_0025.JPG
のサムネイル画像を表示します。
キャッシュを使う場合は、前回の記事を参考に。
2015年7月17日金曜日
GAE/P NDB のクエリで、2つの不等式を使う。
Google App Engine は、クエリの中で複数のプロパティに対して不等式を使うことが出来ません。
これ、結構不便です..
例えば、開始日と終了日の2つのプロパティに対して、
開始日 < 7月10日 and 終了日 > 7月20日
と云うようなクエリは実行できないのです..
で、イロイロと調べて、こんな記事を見つけました。
http://stackoverflow.com/questions/22176586/optimizing-a-inequality-query-in-ndb-over-two-properties
クエリで1つ目の不等式を使い、iterで2つ目の不等式を使うのか。なるほど!!
続いて、こんな記事も見つけた。
http://ae-book.appspot.com/static/pgae-ndb-20121009.pdf
なるほど、iter で cursorも使えそうだな。
と、ここまでは良かったけど、どうも projection と cursor は一緒に使えないみたい..残念。
で、結論は、こんな感じに。
[モデル]
class Event(ndb.Expando):
start_dt = ndb.DateProperty() #開始日時
end_dt = ndb.DateProperty() #終了日時
[スクリプト]
next_curs = request.GET['curs']
cnt = 10
it = Event.query(Event.end_dt >= dt1).iter(projection=[Event.start_dt])
keys = []
if next_curs is not None:
next_curs = int(next_curs)
for e in it:
if e.key.id() == next_curs:
keys.append(e.key)
break
next_curs = None
for e in it:
if e.start_dt <= dt2:
keys.append(e.key)
if len(keys) >= cnt+1:
next_curs = keys[cnt].id()
keys.pop()
break
主なポイントは、以下の通り。
Event.query(Event.end_dt >= dt1) → 1つ目の不等式
if e.key.id() == next_curs: → カーソル位置(キーID)まで早送り
if e.start_dt <= dt2: → 2つ目の不等式
if len(keys) >= cnt+1: → cnt件までループ
これ、結構不便です..
例えば、開始日と終了日の2つのプロパティに対して、
開始日 < 7月10日 and 終了日 > 7月20日
と云うようなクエリは実行できないのです..
で、イロイロと調べて、こんな記事を見つけました。
http://stackoverflow.com/questions/22176586/optimizing-a-inequality-query-in-ndb-over-two-properties
クエリで1つ目の不等式を使い、iterで2つ目の不等式を使うのか。なるほど!!
続いて、こんな記事も見つけた。
http://ae-book.appspot.com/static/pgae-ndb-20121009.pdf
なるほど、iter で cursorも使えそうだな。
と、ここまでは良かったけど、どうも projection と cursor は一緒に使えないみたい..残念。
で、結論は、こんな感じに。
[モデル]
class Event(ndb.Expando):
start_dt = ndb.DateProperty() #開始日時
end_dt = ndb.DateProperty() #終了日時
[スクリプト]
next_curs = request.GET['curs']
cnt = 10
it = Event.query(Event.end_dt >= dt1).iter(projection=[Event.start_dt])
keys = []
if next_curs is not None:
next_curs = int(next_curs)
for e in it:
if e.key.id() == next_curs:
keys.append(e.key)
break
next_curs = None
for e in it:
if e.start_dt <= dt2:
keys.append(e.key)
if len(keys) >= cnt+1:
next_curs = keys[cnt].id()
keys.pop()
break
主なポイントは、以下の通り。
Event.query(Event.end_dt >= dt1) → 1つ目の不等式
if e.key.id() == next_curs: → カーソル位置(キーID)まで早送り
if e.start_dt <= dt2: → 2つ目の不等式
if len(keys) >= cnt+1: → cnt件までループ
2015年5月4日月曜日
django.forms で、datetime-local を使う。
HTML5では、UTC(協定世界時)によらないローカル日時(datetime-local)の入力欄を作成することが出来ます。
これにより、カレンダー型式で入力を行えるようになるので、とても便利です。
でも、これを Django で使うまでが一苦労..
ポイントを纏めておきます。
#環境等
・GAE(Google App Engine)/Python
・Django 1.4
・jquery mobile 1.4
1.モデル
# こんな感じです。NDB使ってます。
class Event(ndb.Model):
start_dt = ndb.DateTimeProperty() # イベントの開始日時の例です。
..
2.フォームオブジェクト
# インプットタイプを指定します。
forms.DateTimeInput.input_type="datetime-local"
# フォームの入力フィールドです。
class EventForm(forms.Form):
start_dt = forms.DateTimeField(label='開始日時:', widget=forms.DateTimeInput, input_formats=['%Y-%m-%dT%H:%M'])
..
# widget で、forms.DateTimeInput を指定することにより、ローカル日時(datetime-local)の入力欄を表示します。
# input_formats で、バリデーションの型 '%Y-%m-%dT%H:%M' を定義します。ここ重要!!
3.テンプレート
<form method="POST" action="/post/">
<div class="ui-field-contain">{{ form.start_dt.label_tag }}{{ form.start_dt.errors }}{{ form.start_dt }}</div>
..
# jquery mobile では、ui-field-contain で括って、ラベルとかエラーとか表示させます。
4.データの書き込み
def post(request):
if request.method == 'POST':
form = EventForm(request.POST)
if form.is_valid():
e = Event()
e.start_dt = form.cleaned_data['start_dt']
e.put()
# バリデーションチェック後、データを書き込みます。
5.データをフォームに渡す
# データを取り出し
e = Event.get_by_id(key)
# strftime で、日時フォーマットを変更
start_dt = e.start_dt.strftime("%Y-%m-%dT%H:%M")
# フォームオブジェクトを生成
data = {
'start_dt' : start_dt,
..
}
form = EventForm(data)
参考
http://www.htmq.com/html5/input.shtml
http://docs.djangoproject.jp/en/latest/topics/forms/index.html
http://stackoverflow.com/questions/16201343/input-formats-to-datetimefield
これにより、カレンダー型式で入力を行えるようになるので、とても便利です。
でも、これを Django で使うまでが一苦労..
ポイントを纏めておきます。
#環境等
・GAE(Google App Engine)/Python
・Django 1.4
・jquery mobile 1.4
1.モデル
# こんな感じです。NDB使ってます。
class Event(ndb.Model):
start_dt = ndb.DateTimeProperty() # イベントの開始日時の例です。
..
2.フォームオブジェクト
# インプットタイプを指定します。
forms.DateTimeInput.input_type="datetime-local"
# フォームの入力フィールドです。
class EventForm(forms.Form):
start_dt = forms.DateTimeField(label='開始日時:', widget=forms.DateTimeInput, input_formats=['%Y-%m-%dT%H:%M'])
..
# widget で、forms.DateTimeInput を指定することにより、ローカル日時(datetime-local)の入力欄を表示します。
# input_formats で、バリデーションの型 '%Y-%m-%dT%H:%M' を定義します。ここ重要!!
3.テンプレート
<form method="POST" action="/post/">
<div class="ui-field-contain">{{ form.start_dt.label_tag }}{{ form.start_dt.errors }}{{ form.start_dt }}</div>
..
# jquery mobile では、ui-field-contain で括って、ラベルとかエラーとか表示させます。
4.データの書き込み
def post(request):
if request.method == 'POST':
form = EventForm(request.POST)
if form.is_valid():
e = Event()
e.start_dt = form.cleaned_data['start_dt']
e.put()
# バリデーションチェック後、データを書き込みます。
5.データをフォームに渡す
# データを取り出し
e = Event.get_by_id(key)
# strftime で、日時フォーマットを変更
start_dt = e.start_dt.strftime("%Y-%m-%dT%H:%M")
# フォームオブジェクトを生成
data = {
'start_dt' : start_dt,
..
}
form = EventForm(data)
参考
http://www.htmq.com/html5/input.shtml
http://docs.djangoproject.jp/en/latest/topics/forms/index.html
http://stackoverflow.com/questions/16201343/input-formats-to-datetimefield
2015年3月15日日曜日
GAE/Python の Backend Instance を使う
GAE/Python は、9時間/日の Backend Instance 無料枠があります。
この無料枠を使う方法をメモっておきます。
[公式ドキュメント]
https://cloud.google.com/appengine/docs/python/modules/
【重要】
・Backends Python API は、2014/3/13 に停止されています。
・WEB上の古い記事に注意しましょう。
[利用ケース]
この Backend Instance は、Cron で起動して、バッチ処理に使うとよいでしょう。
[必要なファイル]
app.yaml
dispatch.yaml
backend.yaml
cron.yaml
[app.yaml]
デフォルト(Frontend Instance)の設定ファイルです。
例:自動スケーリング(F1)を使用します。
-- ここから --
application: <アプリケーション名>
module: default
version: 1
runtime: python27
api_version: 1
threadsafe: true
instance_class: F1
automatic_scaling:
max_idle_instances: 1
min_pending_latency: 15.0s
handlers:
- url: /.*
script: <スクリプト>
-- ここまで --
[dispatch.yaml]
どの処理を Backend Instance に渡すかを記述します。
例: /backend にリクエストがあった場合、module:backend を利用します。
-- ここから --
application: <アプリケーション名>
dispatch:
- url: "*/backend/*"
module: backend
-- ここまで --
[backend.yaml]
バックエンドの設定ファイルです。
例:基本スケーリング(B1)を使用します。
-- ここから --
application: <アプリケーション名>
module: backend
version: 1
runtime: python27
api_version: 1
threadsafe: true
instance_class: B1
basic_scaling:
max_instances: 1
idle_timeout: 10m
handlers:
- url: /.*
script: <スクリプト>
-- ここまで --
[Cron.yaml]
Cron で処理を起動するには、cron.yaml を準備します。
例: 毎日 02:00 に、/backend/cron/day の処理を起動します。
-- ここから --
cron:
- description: Cron Day Job of Backend
url: /backend/cron/day
schedule: every day 02:00
timezone: Asia/Tokyo
target: backend
-- ここまで --
[開発用サーバの起動]
$ google_appengine/dev_appserver.py app.yaml dispatch.yaml backend.yaml
[デプロイ]
$ google_appengine/appcfg.py update app.yaml backend.yaml
[参考]
http://www.topgate.co.jp/blog/20140715
この無料枠を使う方法をメモっておきます。
[公式ドキュメント]
https://cloud.google.com/appengine/docs/python/modules/
【重要】
・Backends Python API は、2014/3/13 に停止されています。
・WEB上の古い記事に注意しましょう。
[利用ケース]
この Backend Instance は、Cron で起動して、バッチ処理に使うとよいでしょう。
[必要なファイル]
app.yaml
dispatch.yaml
backend.yaml
cron.yaml
[app.yaml]
デフォルト(Frontend Instance)の設定ファイルです。
例:自動スケーリング(F1)を使用します。
-- ここから --
application: <アプリケーション名>
module: default
version: 1
runtime: python27
api_version: 1
threadsafe: true
instance_class: F1
automatic_scaling:
max_idle_instances: 1
min_pending_latency: 15.0s
handlers:
- url: /.*
script: <スクリプト>
-- ここまで --
[dispatch.yaml]
どの処理を Backend Instance に渡すかを記述します。
例: /backend にリクエストがあった場合、module:backend を利用します。
-- ここから --
application: <アプリケーション名>
dispatch:
- url: "*/backend/*"
module: backend
-- ここまで --
[backend.yaml]
バックエンドの設定ファイルです。
例:基本スケーリング(B1)を使用します。
-- ここから --
application: <アプリケーション名>
module: backend
version: 1
runtime: python27
api_version: 1
threadsafe: true
instance_class: B1
basic_scaling:
max_instances: 1
idle_timeout: 10m
handlers:
- url: /.*
script: <スクリプト>
-- ここまで --
[Cron.yaml]
Cron で処理を起動するには、cron.yaml を準備します。
例: 毎日 02:00 に、/backend/cron/day の処理を起動します。
-- ここから --
cron:
- description: Cron Day Job of Backend
url: /backend/cron/day
schedule: every day 02:00
timezone: Asia/Tokyo
target: backend
-- ここまで --
[開発用サーバの起動]
$ google_appengine/dev_appserver.py app.yaml dispatch.yaml backend.yaml
[デプロイ]
$ google_appengine/appcfg.py update app.yaml backend.yaml
[参考]
http://www.topgate.co.jp/blog/20140715
2015年3月7日土曜日
jQuery Mobile で WebStorage を使う方法
Formで送信したデータを横取りして、webstorageに入れてみました。
HTMLは、こんなカンジで。
<form id="form" method="get" action="/search/">
<input type="search" id="search" name="q" value="" />
</form>
Formのidは「form」。
送信したデータの名前は「q」。
続いて、スクリプトです。
$(document).on("submit", "#form", function(){
if (window.localStorage) {
var storage = sessionStorage;
var key = jQuery.now();
var val = $(this).serialize().split('=')[1];
//alert(val);
storage.setItem(key, val);
}
});
簡単に説明
on("submit", "#form", … Formの送信を検知。
if (window.localStorage) … ブラウザで webstorageが使えるか、確認。
storage = sessionStorage … セッションストレージを使います。
key = jQuery.now() … キーとして、現在時刻をセット
val = $(this).serialize().split('=')[1] ‥ 送信データから値を取り出し
(例えば、「nec」と入力した場合、「q=nec」が送信されますよ。)
storage.setItem(key, val) … webstorage に格納
格納されたことを確認するには(Chromeの場合)
その他ツール → デベロッパーツール → Resources → Session Storage
取り出すには
var storage = sessionStorage;
for (var i=0; i < storage.length; i++) {
var key = storage.key(i);
var val = storage.getItem(key);
for で回して、keyとvalを得ます。
アイデア次第で、イロイロなことに使えそう。
HTMLは、こんなカンジで。
<form id="form" method="get" action="/search/">
<input type="search" id="search" name="q" value="" />
</form>
Formのidは「form」。
送信したデータの名前は「q」。
続いて、スクリプトです。
$(document).on("submit", "#form", function(){
if (window.localStorage) {
var storage = sessionStorage;
var key = jQuery.now();
var val = $(this).serialize().split('=')[1];
//alert(val);
storage.setItem(key, val);
}
});
簡単に説明
on("submit", "#form", … Formの送信を検知。
if (window.localStorage) … ブラウザで webstorageが使えるか、確認。
storage = sessionStorage … セッションストレージを使います。
key = jQuery.now() … キーとして、現在時刻をセット
val = $(this).serialize().split('=')[1] ‥ 送信データから値を取り出し
(例えば、「nec」と入力した場合、「q=nec」が送信されますよ。)
storage.setItem(key, val) … webstorage に格納
格納されたことを確認するには(Chromeの場合)
その他ツール → デベロッパーツール → Resources → Session Storage
取り出すには
var storage = sessionStorage;
for (var i=0; i < storage.length; i++) {
var key = storage.key(i);
var val = storage.getItem(key);
for で回して、keyとvalを得ます。
アイデア次第で、イロイロなことに使えそう。
2015年2月15日日曜日
【重要】「Yahoo!アフィリエイト」サービス終了のお知らせ
2015/2/10 突然、こんなメールが来た。
-- ここから --
このメールは、Yahoo!アフィリエイトでYahoo!ショッピングアフィリエイトプログラムをご利用いただいているお客様へ送付しております。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【重要】「Yahoo!アフィリエイト」サービス終了のお知らせ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
平素より「Yahoo!アフィリエイト」をご愛顧いただきまして、誠にありがとうございます。
2005年より運営して参りました「Yahoo!アフィリエイト」ですが、2015年3月31日(火)をもちまして、サービスの提供を終了させていただくこととなりました。
ご利用いただいているお客様にはご迷惑をおかけし、深くお詫び申しあげますとともに、長きに渡り、ご支援賜りましたこと、心より御礼申しあげます。
Yahoo!アフィリエイト トップページ
http://affiliate.yahoo.co.jp/
┏■ 今後の予定について
┗┛━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
・コミッション料(アフィリエイト報酬)の発生は、2015年3月31日(火)をもちまして終了いたします。
・2015年3月31日(火)までに発生した広告効果についてのコミッション料をYahoo!アフィリエイト利用規約に従いお支払いいたします。コミッション料の最終支払い月は、ご掲載いただいているサービスにより異なります。
Yahoo!ショッピングの場合、2015年3月末日までにYahoo!アフィリエイトリンクをクリックされ、cookie有効期限内(最長30日)に注文完了に至ったものをコミッション料として計上します。
コミッション料支払い月は、出店ストア様の注文完了処理タイミングにより異なります。
最終支払い月は2015年12月の予定です。
・サービス終了後は、お客様が本サービスで設定したリンクはすべて無効となります。
「現在、この広告リンクは使われておりません」というエラーページに遷移いたします。
お手数ですが、終了日までにリンクの修正・削除ご対応をお願い申しあげます。
・過去実績・お支払い予定金額は、最終支払い月まで、アフィリエイト・レポートにて引き続きご確認いただけます。
┏■ 代替サービスについて
┗┛━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
バリューコマース株式会社により運営されるアフィリエイトプログラムにつきましては、引き続きご利用いただけます。ぜひ、バリューコマース株式会社のアフィリエイトサービスのご利用をご検討ください。
<ご参考>
バリューコマース株式会社のアフィリエイトプログラムについて(外部リンク)
https://www.valuecommerce.ne.jp/beginners/
※バリューコマースアフィリエイトをご利用いただくには、無料登録のうえ、バリューコマース株式会社による審査を受ける必要があります。
┏■ ご注意事項
┗┛━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆「現金」によるお支払いを選択中で、2,000円未満のコミッション料金額のお客様へ最終支払い月(2015年12月)以降に集計し、2,000円に満たないお客様に対しても「コミッション料の現金支給に関わる特約事項」(以下「特約」という)第5項の記載にかかわらず、ご登録口座へお振込みいたします。その際、特約第2項に従い、振込手数料216円(税込)を差し引いて支払うものとします。
Tポイントでのお支払いを希望されるお客様は、2015年3月31日までにYahoo!アフィリエイトトップページ(http://affiliate.yahoo.co.jp/)の「アフィリエイト・レポート」の「受け取り状況」にて、受け取り方法の変更を設定してください。
※振込み手数料と相殺されるため、残高が216円以下のお客様はお支払いできません。
※ご登録口座が不明と判断された場合は、Tポイントでお支払いいたします。
◆Yahoo!デベロッパーネットワークにつきまして
ショッピング情報取得APIをご利用中のお客様は、2015年4月以降も継続してご利用いただけます。継続利用をご希望の場合、自動的にアフィリエイトリンクから通常リンクに変更されますので、特に対応は発生しません。
バリューコマース社のアフィリエイトプログラムにてYahoo!ショッピングアフィリエイトプログラムを継続利用される場合は、「affiliate_type」を「yid」から「vc」に変更していただく必要がございます。
お手数をお掛けしますが、ご対応のほどよろしくお願い申しあげます。
◆「お買い物レビュー」アフィリエイトにつきまして
Yahoo!アフィリエイトサービス終了をもちまして、「お買い物レビュー」アフィリエイトも終了となります。投稿いただいたレビューは2015年4月以降も掲載は継続されます。
当該レビューを経由して注文が発生した場合のコミッション料獲得条件は、2015年3月末日までにクリックされ、cookie有効期限内(最長30日)に注文完了に至ったものをコミッション料として計上します。
◆アフィリエイトパーツにつきまして
「パーツギャラリー」より作成いただいたパーツは、種類により対応が異なります。
(1)以下のパーツは自動的にアフィリエイトリンクから通常リンクに変更されます
「商品レビューパーツ」
「商品一覧パーツ」
「コンテンツマッチパーツ」
(2)以下のパーツはサービス終了までに差替え対応をお願いいたします
「URL指定リンク」
「キーワード検索リンク」
◆サービス終了後のアフィリエイトリンクについて
サービス終了後は、バリューコマース社のページに遷移します。
お手数をお掛けいたしますが、お早目にリンク修正・削除のご対応をお願い申しあげます。
本メールに関し、ご確認ならびにご対応を重ねてお願い申しあげます。
今までYahoo!アフィリエイトをご利用くださいまして、誠にありがとうございました。
今後とも弊社サービスをよろしくお願いいたします。
-- ここまで --
ヤフーショッピングの情報取得APIは、「通常リンクに変更されます」って??
これ、アフェリエイト報酬が入らないってことだよね。
で、バリューコマースに切り替えろと..
でも、バリューコマースって、審査が厳しかったような..
と、悩んでてもしかたないので、早速、バリューコマースに申し込み。
2/10に申し込んで、2/12に承認メールが来た。
これで、一安心。
こちらのページを参考に、アフェリエイトIDを変更し、無事に切り替え完了しました。
http://developer.yahoo.co.jp/appendix/shopping/affiliate.html
ID切り替えだけなので、サイトは、そのままです..
わいわいサーチ http://yy-search.appspot.com/
バリューコマースは、楽天やアマゾンも使えるようなので、もう少し調べてみるかな。
-- ここから --
このメールは、Yahoo!アフィリエイトでYahoo!ショッピングアフィリエイトプログラムをご利用いただいているお客様へ送付しております。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【重要】「Yahoo!アフィリエイト」サービス終了のお知らせ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
平素より「Yahoo!アフィリエイト」をご愛顧いただきまして、誠にありがとうございます。
2005年より運営して参りました「Yahoo!アフィリエイト」ですが、2015年3月31日(火)をもちまして、サービスの提供を終了させていただくこととなりました。
ご利用いただいているお客様にはご迷惑をおかけし、深くお詫び申しあげますとともに、長きに渡り、ご支援賜りましたこと、心より御礼申しあげます。
Yahoo!アフィリエイト トップページ
http://affiliate.yahoo.co.jp/
┏■ 今後の予定について
┗┛━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
・コミッション料(アフィリエイト報酬)の発生は、2015年3月31日(火)をもちまして終了いたします。
・2015年3月31日(火)までに発生した広告効果についてのコミッション料をYahoo!アフィリエイト利用規約に従いお支払いいたします。コミッション料の最終支払い月は、ご掲載いただいているサービスにより異なります。
Yahoo!ショッピングの場合、2015年3月末日までにYahoo!アフィリエイトリンクをクリックされ、cookie有効期限内(最長30日)に注文完了に至ったものをコミッション料として計上します。
コミッション料支払い月は、出店ストア様の注文完了処理タイミングにより異なります。
最終支払い月は2015年12月の予定です。
・サービス終了後は、お客様が本サービスで設定したリンクはすべて無効となります。
「現在、この広告リンクは使われておりません」というエラーページに遷移いたします。
お手数ですが、終了日までにリンクの修正・削除ご対応をお願い申しあげます。
・過去実績・お支払い予定金額は、最終支払い月まで、アフィリエイト・レポートにて引き続きご確認いただけます。
┏■ 代替サービスについて
┗┛━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
バリューコマース株式会社により運営されるアフィリエイトプログラムにつきましては、引き続きご利用いただけます。ぜひ、バリューコマース株式会社のアフィリエイトサービスのご利用をご検討ください。
<ご参考>
バリューコマース株式会社のアフィリエイトプログラムについて(外部リンク)
https://www.valuecommerce.ne.jp/beginners/
※バリューコマースアフィリエイトをご利用いただくには、無料登録のうえ、バリューコマース株式会社による審査を受ける必要があります。
┏■ ご注意事項
┗┛━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆「現金」によるお支払いを選択中で、2,000円未満のコミッション料金額のお客様へ最終支払い月(2015年12月)以降に集計し、2,000円に満たないお客様に対しても「コミッション料の現金支給に関わる特約事項」(以下「特約」という)第5項の記載にかかわらず、ご登録口座へお振込みいたします。その際、特約第2項に従い、振込手数料216円(税込)を差し引いて支払うものとします。
Tポイントでのお支払いを希望されるお客様は、2015年3月31日までにYahoo!アフィリエイトトップページ(http://affiliate.yahoo.co.jp/)の「アフィリエイト・レポート」の「受け取り状況」にて、受け取り方法の変更を設定してください。
※振込み手数料と相殺されるため、残高が216円以下のお客様はお支払いできません。
※ご登録口座が不明と判断された場合は、Tポイントでお支払いいたします。
◆Yahoo!デベロッパーネットワークにつきまして
ショッピング情報取得APIをご利用中のお客様は、2015年4月以降も継続してご利用いただけます。継続利用をご希望の場合、自動的にアフィリエイトリンクから通常リンクに変更されますので、特に対応は発生しません。
バリューコマース社のアフィリエイトプログラムにてYahoo!ショッピングアフィリエイトプログラムを継続利用される場合は、「affiliate_type」を「yid」から「vc」に変更していただく必要がございます。
お手数をお掛けしますが、ご対応のほどよろしくお願い申しあげます。
◆「お買い物レビュー」アフィリエイトにつきまして
Yahoo!アフィリエイトサービス終了をもちまして、「お買い物レビュー」アフィリエイトも終了となります。投稿いただいたレビューは2015年4月以降も掲載は継続されます。
当該レビューを経由して注文が発生した場合のコミッション料獲得条件は、2015年3月末日までにクリックされ、cookie有効期限内(最長30日)に注文完了に至ったものをコミッション料として計上します。
◆アフィリエイトパーツにつきまして
「パーツギャラリー」より作成いただいたパーツは、種類により対応が異なります。
(1)以下のパーツは自動的にアフィリエイトリンクから通常リンクに変更されます
「商品レビューパーツ」
「商品一覧パーツ」
「コンテンツマッチパーツ」
(2)以下のパーツはサービス終了までに差替え対応をお願いいたします
「URL指定リンク」
「キーワード検索リンク」
◆サービス終了後のアフィリエイトリンクについて
サービス終了後は、バリューコマース社のページに遷移します。
お手数をお掛けいたしますが、お早目にリンク修正・削除のご対応をお願い申しあげます。
本メールに関し、ご確認ならびにご対応を重ねてお願い申しあげます。
今までYahoo!アフィリエイトをご利用くださいまして、誠にありがとうございました。
今後とも弊社サービスをよろしくお願いいたします。
-- ここまで --
ヤフーショッピングの情報取得APIは、「通常リンクに変更されます」って??
これ、アフェリエイト報酬が入らないってことだよね。
で、バリューコマースに切り替えろと..
でも、バリューコマースって、審査が厳しかったような..
と、悩んでてもしかたないので、早速、バリューコマースに申し込み。
2/10に申し込んで、2/12に承認メールが来た。
これで、一安心。
こちらのページを参考に、アフェリエイトIDを変更し、無事に切り替え完了しました。
http://developer.yahoo.co.jp/appendix/shopping/affiliate.html
ID切り替えだけなので、サイトは、そのままです..
わいわいサーチ http://yy-search.appspot.com/
バリューコマースは、楽天やアマゾンも使えるようなので、もう少し調べてみるかな。
登録:
投稿 (Atom)