LinkExchange — это программная библиотека для языка Python, предназначенная для интеграции различных систем купли-продажи ссылок с сайтом, созданным на Python.

На данный момент поддерживаются системы Sape.ru (обычные и контекстные ссылки) и LinkFeed.ru.

Коротко об основных преимуществах перед официальным PHP-кодом и кодом на Python, сделанным по его подобию:
  • удобное разбиение ссылок на блоки и их форматирование;
  • высокая производительность на крупных сайтах;
  • легко подключается к популярным фреймворкам и приложениям.


LinkExchange состоит из следующих компонентов:
  • клиенты к различным системам купли-продажи ссылок;
  • классы форматирования блоков ссылок;
  • драйвера баз данных для хранения данных, что возвращают удаленные службы клиентам;
  • вспомогательный код для интеграции с различными основанными на Python веб-приложениями и фреймворками.


Рассмотрим пример подключения к Django. Фрагмент файла settings.py:
Код:
from os.path import dirname, join

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    # загружаем переменные для доступа к ссылкам из шаблонов
    'linkexchange.django.context_processors.linkexchange',
    )

# определяем путь к конфигу LinkExchange
LINKEXCHANGE_CONFIG = join(dirname(__file__), 'linkexchange.cfg')
Файл linkexchange.cfg:
Код:
[options]
; если надо принудительно задать хост, ставим эту опцию,
; иначе хост определяется по HTTP запросу
; host = example.com

; определение клиента
[client-1]
type = linkfeed
user = user12345
; используем модуль shelve для доступа к БД, что позволяет нам
; быстро получать нужные данные, не загружая весь список
; ссылок в память.
db_driver.type = shelve
; храним БД в файле linkfeed-XXX.db, где XXX заменяется на имя домена
db_driver.filename = linkfeed-XXX.db

; определение объектов форматирования
; количество объектов форматирования определяет
; количество блоков ссылок на странице
[formatter-1]
; первый блок ссылок оформляется как список <UL><LI>...</UL>
type = list
; до двух ссылок в блоке
count = 2
; класс тега UL будет linx
class_ = linx
; префикс к каждой ссылке
prefix = "-&nbsp;"
; а в конце ставим точку
suffix = ". "

[formatter-2]
; второй блок оформим как элемент DIV с перечисленными
; в нем ссылками
type = inline
count = 2
class_ = linx
; ссылки разделяем этой строкой
delimiter = " | "
; если в блоке есть ссылки, то перед ними ставим это
prolog = "| "
; а после ссылок ставим это
epilog = " |"

[formatter-3]
; здесь опять ненумерованный список
type = list
; этот блок последний и он забирает все оставшиеся ссылки
count = none
class_ = linx
prefix = "+&nbsp;"
suffix = ". "
В шаблоне используем переменную linkexchange_blocks:
Код:
<p> Место 1 : {{ linkexchange_blocks.0|safe }}</p>
<p> Место 2 : {{ linkexchange_blocks.1|safe }}</p>
<p> Место 3 : {{ linkexchange_blocks.2|safe }}</p>