Metadata-Version: 2.4
Name: coffeecode-optimizer
Version: 1.0.0
Summary: SEO meta tag and social sharing tag generator (OpenGraph, Twitter Card, Facebook). Python fork of robsonvleite/optimizer (PHP).
Project-URL: Homepage, https://github.com/kauelima21/coffeecode-optimizer
Project-URL: Original PHP, https://github.com/robsonvleite/optimizer
Project-URL: Issues, https://github.com/kauelima21/coffeecode-optimizer/issues
Author-email: Kaue Leal <kaue.lima@totvs.com.br>
License: MIT
License-File: LICENSE
Keywords: coffeecode,facebook,fastapi,flask,meta-tags,open-graph,seo,social,twitter-card
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.9
Provides-Extra: dev
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
Requires-Dist: pytest>=7.0; extra == 'dev'
Description-Content-Type: text/markdown

# Optimizer (Python)

Port em Python do pacote PHP [coffeecode/optimizer](https://github.com/robsonvleite/optimizer)
de Robson V. Leite. Gera tags `<head>` para SEO, Open Graph, Twitter Card e
Facebook com uma API fluente — direto ao ponto, sem dependencias.

> Python port of the PHP package [coffeecode/optimizer](https://github.com/robsonvleite/optimizer)
> by Robson V. Leite. Builds `<head>` tags for SEO, Open Graph, Twitter Card,
> and Facebook through a fluent API. Zero dependencies.

## Destaques

- API fluente: `optimize → publisher → open_graph → twitter_card → facebook → render`
- Tags `<title>`, `<meta>`, `<link rel=canonical>` com escape automatico
- Acesso aos dados via atributos: `op.title`, `op.description`, `op.url`, `op.image`
- Pure Python — sem dependencias de runtime

## Instalacao

```bash
pip install coffeecode-optimizer
```

Requer Python >= 3.9.

## Uso

```python
from coffeecode_optimizer import Optimizer

op = (
    Optimizer()
    .optimize(
        title="Optimizer Happy and @CoffeeCode",
        description="Is a compact and easy-to-use tag creator to optimize your site",
        url="https://www.upinside.com.br/coffeecode/optimizer/example/",
        image="https://www.upinside.com.br/uploads/images/example.jpg",
    )
    .publisher("upinside", "robsonvleite")
    .twitter_card("@robsonvleite", "@robsonvleite", "upinside.com.br", "summary_large_image")
    .open_graph("upinside", "pt_BR", "article")
    .facebook(admins=["626590460695980", "626590460695981"])
)

print(op.render())
print(op.title, op.description)
```

### FastAPI

```python
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from coffeecode_optimizer import Optimizer

app = FastAPI()

@app.get("/", response_class=HTMLResponse)
def home():
    op = (
        Optimizer()
        .optimize("Title", "Desc", "https://example.com/", "https://example.com/img.jpg")
        .open_graph("example")
        .twitter_card("@me", "@me", "example.com")
    )
    return f"<!doctype html><html><head>{op.render()}</head><body><h1>{op.title}</h1></body></html>"
```

### Flask

```python
from flask import Flask
from coffeecode_optimizer import Optimizer

app = Flask(__name__)

@app.route("/")
def home():
    op = Optimizer().optimize("T", "D", "https://u", "https://i").open_graph("site")
    return f"<!doctype html><html><head>{op.render()}</head></html>"
```

## API

### `Optimizer()`

Construtor sem argumentos. Cada chamada de builder retorna `self` para
encadeamento. Encerre com `.render()`.

### `optimize(title, description, url, image, follow=True) -> Optimizer`

Emite o conjunto principal: `<title>`, `<meta name="description">`,
`<meta name="robots">`, `<link rel="canonical">`, bloco Open Graph, bloco
Twitter Card, bloco `itemprop` (Schema.org).

### `publisher(fb_page, fb_author=None) -> Optimizer`

Emite `article:publisher` (e opcionalmente `article:author`) apontando para
URLs do Facebook.

### `open_graph(site_name, locale="pt_BR", schema="article") -> Optimizer`

Emite `og:type`, `og:site_name`, `og:locale`. Alias `openGraph` mantido
para compatibilidade com a API PHP.

### `twitter_card(creator, site, domain, card=None) -> Optimizer`

Emite `twitter:card` (default `summary_large_image`), `twitter:site`,
`twitter:creator`, `twitter:domain`. Alias `twitterCard` disponivel.

### `facebook(app_id=None, admins=None) -> Optimizer`

Emite `fb:app_id` OU multiplas `fb:admins` (mutuamente exclusivos).

### `render() -> str`

Concatena todas as tags acumuladas em uma unica string.

### `debug(sort=True) -> list[str]`

Retorna a lista de tags ja renderizadas (uma string por tag).

### `data(title=None, description=None, url=None, image=None) -> SimpleNamespace`

Define ou consulta o namespace de dados acessivel via `op.title`, `op.url`, etc.

## Equivalencia com a versao PHP

| PHP                                       | Python                                    |
|-------------------------------------------|-------------------------------------------|
| `CoffeeCode\Optimizer\Optimizer`          | `coffeecode_optimizer.Optimizer`          |
| `CoffeeCode\Optimizer\MetaTags`           | `coffeecode_optimizer.MetaTags`           |
| `optimize()`                              | `optimize()`                              |
| `publisher()`                             | `publisher()`                             |
| `openGraph()`                             | `open_graph()` (alias `openGraph`)        |
| `twitterCard()`                           | `twitter_card()` (alias `twitterCard`)    |
| `facebook()`                              | `facebook()`                              |
| `render() / debug() / data()`             | `render() / debug() / data()`             |
| `SimpleXMLIterator` + `urlencode` round-trip | Lista de dicts + `html.escape` no render |

## Creditos

- API original: Robson V. Leite — [coffeecode/optimizer](https://github.com/robsonvleite/optimizer) (MIT)
- Port Python: Kaue Leal

## Licenca

MIT.
