web-dev-qa-db-ja.com

Ubuntu Software Centerでパーソナライズされたバナー展示を表示する

Ubuntu Software Centerでパーソナライズされた独自のバナー展示を表示するにはどうすればよいですか?

これまでに/usr/share/software-center/softwarecenter/enums.py/usr/share/software-center/softwarecenter/distro/Ubuntu.pyでいくつかのURL定義を見てきました。

また、ビューからコアまでのコードを追跡しようとしました。しかし、私は迷子になりました。 _append_banner_addsSoftwareCenterAgentを呼び出します。 SpawnHelperを呼び出します。それから私は迷子になります。 SimpleFileDownloaderにもいくつかの呼び出しがありますが、それらを追跡することはできません。

また、デバッグログにこのエントリがあることに気付きました。

2013-02-08 15:07:43,731 - softwarecenter.simplefiledownloader - DEBUG - download_file: http://software-center.ubuntu.com/site_media/exhibits/2012/12/SC_banner_Mixxx_2.png None True

これの実装方法に関するドキュメントはありますか?デフォルトのバナーを変更し、自分のバナーをきれいな方法で配置する簡単なレシピは非常に役立ちます。

私は_append_banner_adds関数を簡単に書き換えることができると思いますが、pythonと、できればUbuntuが使用しているのと同じ方法を理解して使用したいと思います。

11

_/usr/share/software-center/softwarecenter/backend/scagent.py_を開き、この関数の先頭を編集して、次のようにします。

_def query_exhibits(self):
    import urllib, json
    class Obj:
      def __init__(self, obj):
        self.obj = obj
      def __getattr__(self, name):
        if name[:2] == "__": return object.__getattr__(self, name)
        return self.obj[name]

    self.emit("exhibits", [Obj(x) for x in json.loads(urllib.urlopen("http://localhost:8800/cgi-bin/bannerlist.py").read())])
    return
_

残りはそのままにしておくことができ、到達することはありません。

_<iframe>_でスクリプトのサポートが必要な場合は、編集します

_/usr/share/software-center/softwarecenter/ui/gtk3/widgets/exhibits.py_

settings.set_property("enable-scripts", False)を見つけます。 FalseTrueに変更します。

ここで_/var/www/cgi-bin/bannerlist.py_を作成し、実行可能にします:

_#!/usr/bin/env python
import json

print("Content-type: application/json\n")

print(json.dumps([
{
  "html": "<iframe src='file:/tmp/test.html'></iframe>",
  "title_translated": "Hey dawg",
  "click_url": "http://4chan.org",
  "package_names": ("gimp"),
  "banner_urls": ["file:/"],
  "published": True
},
{
  "html": "<iframe src='http://localhost:8800/cgi-bin/banner.py'></iframe>",
  "title_translated": "Hey dawg",
  "click_url": "http://4chan.org",
  "package_names": ("gimp"),
  "banner_urls": ["file:/"],
  "published": True
}
]))
_

これは、生成されたバナーリストを示しています。

ここで_/var/www/cgi-bin/banner.py_を作成し、実行可能にします:

_#!/usr/bin/env python3
import time
print("Content-type: image/svg+xml\n")
print("""
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <rect width="300" height="100"
  style="fill:rgba(0,0,255,0.5);stroke-width:1;stroke:rgba(0,0,0,0.5)"/>
  <text x="0" y="25" fill="black">Time is """ + str(time.time()) + """</text>
</svg> 
""")
_

これは、生成されたバナーを示しています。

ソフトウェアセンターのキャッシュをクリアする必要がある場合があります。 _rm -rf ~/.cache/software-center_を使用してそれを行うことができます。

最初のバナーを機能させるには、明らかに_/tmp/test.html_に何かを入れる必要があります。

また、8800で_cgi-bin_で動作するWebサーバーが必要です。これがない場合は、これをBashで実行します。

_cd /var/www
python -c "import BaseHTTPServer as h, CGIHTTPServer as c;
i = c.CGIHTTPRequestHandler;
i.cgi_directories = ['/cgi-bin'];
h.HTTPServer(('', 8800),i).serve_forever()"
_

スペースを埋めるためにiframeをスタイルする必要がありますが、それを理解しました。

6
Janus Troelsen