Для чего нужна данная статья? :
Реализовать SEO-описание из API или файла.
Зачем Вам это уметь? :
1. Веб-приложения
- API-сервис: Создание REST или GraphQL API для генерации SEO-описаний.
- Интеграция с CMS: Встраивание в платформы, такие как WordPress, для автоматической генерации мета-описаний.
2. CLI-приложения
- Генерация описаний из текстовых файлов или CSV.
- Пакетная обработка больших объемов данных.
- Конвертация метаданных в формат JSON, XML, или HTML.
3. Инструменты для анализа и оптимизации
- Анализ ключевых слов: Генерация описаний с учетом специфических ключевых слов.
- Оценка длины текста: Убедиться, что описания соответствуют ограничениям (например, 150-160 символов).
- Подсчет плотности ключевых слов: Обеспечить оптимальное количество повторений ключевых слов для улучшения ранжирования.
4. Сервисы на основе искусственного интеллекта
- Генерация описаний на основе анализа текста статьи.
5. Плагины для браузера
- Генерация SEO-описаний на основе просматриваемой веб-страницы.
- Автоматическая вставка сгенерированных описаний в поля формы на сайтах.
6. Автоматизация рабочих процессов
- CI/CD Pipeline: Генерация SEO-описаний при деплое контента на сайт.
- Интеграция с задачами DevOps: Использование вместе с Docker и системами развертывания для предварительной генерации мета-данных.
7. Облачные сервисы
- Использование платформ, таких как AWS Lambda или Google Cloud Functions, для серверлес-генерации SEO-описаний.
- Интеграция с NoSQL/SQL базами данных для хранения и доступа к мета-данным.
8. Мультиязычные SEO-описания
- Генерация текстов с учетом правил языка, на котором они будут отображаться.
9. Плагины для e-commerce
- Генерация SEO-описаний для карточек товаров.
- Создание оптимизированных мета-данных для категорий, акций и других страниц.
10. Решения для маркетологов
- Интерфейс для настройки: Визуальный редактор, позволяющий задавать параметры (длина, ключевые слова, стиль текста).
- Синхронизация с рекламными кампаниями: Генерация текстов, оптимизированных под рекламные платформы (Google Ads, Facebook).
Генератор SEO-описаний для анализа ключевых слов, работы с мультиязычным текстом и поддержки генерации описаний на основе искусственного интеллекта.
use clap::{Arg, Command};
use reqwest::Client;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fs::File;
use std::io::{self, Read};
use tokio;
use rust_bert::pipelines::summarization::SummarizationModel;
#[derive(Serialize, Deserialize, Debug)]
struct SEODescription {
source: String,
language: String,
description: String,
keywords: Vec<String>,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Создание CLI с помощью clap
let matches = Command::new("SEO Generator")
.version("1.1")
.author("Your Name <youremail@example.com>")
.about("Generates SEO descriptions with keyword analysis and AI support")
.arg(
Arg::new("input")
.short('i')
.long("input")
.value_name("FILE/URL")
.about("Input text file or URL")
.takes_value(true),
)
.arg(
Arg::new("length")
.short('l')
.long("length")
.value_name("NUMBER")
.about("Max length of the description (default: 160)")
.default_value("160")
.takes_value(true),
)
.arg(
Arg::new("language")
.short('lang')
.long("language")
.value_name("LANGUAGE")
.about("Language for the description (default: en)")
.default_value("en")
.takes_value(true),
)
.get_matches();
// Получение входных данных
let input = matches
.value_of("input")
.ok_or("No input provided. Use --input to specify a file or URL.")?;
let max_length: usize = matches.value_of_t("length")?;
let language = matches.value_of("language").unwrap_or("en").to_string();
// Получение текста (локальный файл или URL)
let text = if input.starts_with("http://") || input.starts_with("https://") {
fetch_text_from_url(input).await?
} else {
read_text_from_file(input)?
};
// Анализ ключевых слов
let keywords = extract_keywords(&text);
// Генерация SEO-описания с использованием AI
let description = generate_seo_description_ai(&text, max_length)?;
// Формирование результата
let seo_result = SEODescription {
source: input.to_string(),
language,
description,
keywords,
};
// Сериализация в JSON
let json_output = serde_json::to_string_pretty(&seo_result)?;
println!("{}", json_output);
Ok(())
}
// Функция для чтения текста из локального файла
fn read_text_from_file(file_path: &str) -> Result<String, io::Error> {
let mut file = File::open(file_path)?;
let mut content = String::new();
file.read_to_string(&mut content)?;
Ok(content)
}
// Функция для получения текста с URL
async fn fetch_text_from_url(url: &str) -> Result<String, Box<dyn std::error::Error>> {
let client = Client::new();
let response = client.get(url).send().await?;
let text = response.text().await?;
Ok(text)
}
// Генерация SEO-описания с использованием AI
fn generate_seo_description_ai(text: &str, max_length: usize) -> Result<String, Box<dyn std::error::Error>> {
let model = SummarizationModel::new(Default::default())?;
let summaries = model.summarize(&[text]);
// Ограничение длины результата
let mut description = summaries.first().unwrap_or(&String::new()).to_string();
if description.len() > max_length {
description.truncate(max_length);
if let Some(last_space) = description.rfind(' ') {
description.truncate(last_space);
}
description.push_str("...");
}
Ok(description)
}
// Функция для анализа ключевых слов
fn extract_keywords(text: &str) -> Vec<String> {
let mut word_count: HashMap<String, usize> = HashMap::new();
for word in text.split_whitespace() {
let word = word.to_lowercase()
.trim_matches(|c: char| !c.is_alphanumeric());
if word.len() > 2 { // Игнорировать короткие слова
*word_count.entry(word.to_string()).or_insert(0) += 1;
}
}
let mut keywords: Vec<(String, usize)> = word_count.into_iter().collect();
keywords.sort_by(|a, b| b.1.cmp(&a.1)); // Сортировка по частоте
// Возвращаем топ-10 ключевых слов
keywords.into_iter().take(10).map(|(word, _)| word).collect()
}
Локальный файл:
cargo run -- --input "sample.txt" --length 150 --language "en"
URL:
cargo run -- --input "https://example.com" --length 160 --language "en"