Plugini, skripte i ostalo (kreirano sa AI) korisni i besplatni toolovi

Ukoliko pravite plugine za WP ili python skripte ili nešto treće sa chatgpt ili sa drugim AI možda ne bi bilo loše da se podjeli sa ostalima. možda nekome koristi, a besplatno je. može se možda doći i do dodatnih ideja ili nekih novih funkcija iskoristivosti i slično

evo ja da krenem sa jednim pluginom koji preko pexels apija uvozi u medija library slike na određenu temu i u broju u kom želite



evo ga kod za plugin ako kome treba:

<?php
/*
Plugin Name: Simple Pexels Image Importer
Description: Plugin za uvoz slika sa Pexels API-a u WordPress Media Library (minimalno 1280px širine).
Version: 1.4
Author: Your Name
*/

if (!defined('ABSPATH')) {
    exit;
}

// Define your Pexels API key
define('PEXELS_API_KEY', 'Ovdje-upisati-api-key');
define('PEXELS_IMAGE_COUNT', 200); // Increased to 200 images
define('PEXELS_PER_PAGE', 80);
define('MIN_WIDTH', 1280); // Minimum width of the image

// Add options to the WordPress admin menu
function simple_pexels_image_importer_menu() {
    add_menu_page(
        'Pexels Image Importer',
        'Pexels Image Importer',
        'manage_options',
        'simple_pexels_image_importer',
        'simple_pexels_image_importer_page'
    );
}
add_action('admin_menu', 'simple_pexels_image_importer_menu');

// Display the image import page
function simple_pexels_image_importer_page() {
    ?>
    <div class="wrap">
        <h1>Simple Pexels Image Importer</h1>
        <p>Kliknite na dugme ispod da uvezete <?php echo PEXELS_IMAGE_COUNT; ?> slika iz Pexels API-a (minimalno <?php echo MIN_WIDTH; ?>px širine, horizontalna orijentacija).</p>
        <form method="post">
            <?php wp_nonce_field('simple_pexels_import_action', 'simple_pexels_nonce'); ?>
            <label for="keywords">Ključne reči (odvojene zarezima):</label>
            <input type="text" name="keywords" id="keywords" placeholder="nature, flowers, sea" />
            <label for="image_count">Broj slika:</label>
            <input type="number" name="image_count" id="image_count" value="<?php echo PEXELS_IMAGE_COUNT; ?>" min="1" max="200"/>
            <input type="submit" name="simple_pexels_import_images" class="button button-primary" value="Uvezi slike odmah">
        </form>
    </div>
    <?php
}

// Function to import images
function simple_pexels_import_images() {
    if (!isset($_POST['simple_pexels_import_images']) || 
        !wp_verify_nonce($_POST['simple_pexels_nonce'], 'simple_pexels_import_action')) {
        return;
    }

    // Set execution time and memory limit
    set_time_limit(300);
    ini_set('memory_limit', '512M');

    $keywords = isset($_POST['keywords']) ? explode(',', sanitize_text_field(trim($_POST['keywords']))) : ['nature', 'flowers', 'space', 'sea', 'water', 'ocean', 'tree'];
    
    $image_count = isset($_POST['image_count']) ? intval($_POST['image_count']) : PEXELS_IMAGE_COUNT;
    
    $imported_count = 0;
    $page = 1;
    $errors = [];

    // Loop through specified keywords
    foreach ($keywords as $keyword) {
        if ($imported_count >= $image_count) break;

        while ($imported_count < $image_count) {
            // Make API request to Pexels API
            $response = wp_remote_get(
                "https://api.pexels.com/v1/search?query=" . urlencode(trim($keyword)) . 
                "&per_page=" . PEXELS_PER_PAGE . 
                "&page=" . $page . 
                "&orientation=landscape",
                array(
                    'headers' => array(
                        'Authorization' => PEXELS_API_KEY
                    ),
                    'timeout' => 60
                )
            );

            if (is_wp_error($response)) {
                $errors[] = "API Error: " . $response->get_error_message();
                break;
            }

            $body = json_decode(wp_remote_retrieve_body($response), true);

            if (!isset($body['photos']) || empty($body['photos'])) {
                break;
            }

            foreach ($body['photos'] as $photo) {
                if ($imported_count >= $image_count) break 2;

                // Check image width and orientation
                if ($photo['width'] < MIN_WIDTH || $photo['width'] < $photo['height']) {
                    continue; // Skip images that are too small or vertical
                }

                // Use original size of the image
                $image_url = $photo['src']['original'];
                $image_name = sanitize_title($photo['photographer'] . '-' . $photo['id']) . '.jpg';

                // Check if image already exists
                if (!image_exists_in_library($image_name)) {
                    echo '<div class="notice notice-info is-dismissible">';
                    echo '<p>Preuzimam sliku: ' . esc_html($image_name) . ' (' . $photo['width'] . 'x' . $photo['height'] . ')</p>';
                    echo '</div>';

                    $image_id = simple_upload_image_to_library($image_url, $image_name);
                    
                    if ($image_id) {
                        // Add meta data
                        update_post_meta($image_id, 'pexels_id', $photo['id']);
                        update_post_meta($image_id, 'photographer', $photo['photographer']);
                        update_post_meta($image_id, 'image_width', $photo['width']);
                        update_post_meta($image_id, 'image_height', $photo['height']);
                        $imported_count++;
                        
                        echo '<div class="notice notice-success is-dismissible">';
                        echo '<p>Uspješno uvezena slika: ' . esc_html($image_name) . ' (' . $photo['width'] . 'x' . $photo['height'] . ')</p>';
                        echo '</div>';
                    }
                }
            }

            $page++;
            sleep(1);
        }
    }

    if (!empty($errors)) {
        foreach ($errors as $error) {
            echo '<div class="notice notice-error is-dismissible"><p>' . esc_html($error) . '</p></div>';
        }
    }

    echo '<div class="notice notice-success is-dismissible">';
    echo '<p>Proces završen. Ukupno uvezeno: ' . $imported_count . ' slika.</p>';
    echo '</div>';
}
add_action('admin_init', 'simple_pexels_import_images');

// Function to check if an image already exists in the library
function image_exists_in_library($filename) {
    $args = array(
        'post_type' => 'attachment',
        'post_status' => 'inherit',
        'posts_per_page' => 1,
        'meta_query' => array(
            array(
                'key' => '_wp_attached_file',
                'value' => $filename,
                'compare' => 'LIKE'
            )
        )
    );
    
    $query = new WP_Query($args);
    return $query->have_posts();
}

// Function to upload images to Media Library
function simple_upload_image_to_library($image_url, $filename = '') {
    if (empty($filename)) {
        $filename = basename($image_url);
    }

    $temp_file = download_url($image_url);

    if (is_wp_error($temp_file)) {
        return false;
    }

    $file_array = array(
        'name' => $filename,
        'tmp_name' => $temp_file,
        'error' => 0,
        'size' => filesize($temp_file)
    );

    // Handle sideloading the file into the Media Library
    $attachment_id = media_handle_sideload($file_array, 0);

    @unlink($temp_file);

    if (is_wp_error($attachment_id)) {
        return false;
    }

    return $attachment_id;
}


ako ne znate šta bi sa ovim kodom odete na PHP Online Compiler ubacite kod tamo, idete na download, poslije taj fajl nazovete imenom plugina, ubacite u folder istog imena i taj folder sa php fajlom unutra kompresujete sa zip i eto ga plugin spreman za upotrebu. ova napomena vjerovatno treba za one koji se nisu igrali sa ovim i bolje da je ima jer je do nedavno i meni trebalo ovako objašnjeno.

e čemu sad potreba za ovim pluginom. meni trebaju slike za automatiku da poubacujem slike u postove za featured i bar jednu sliku u članku. a kako su članci neke neutralne kategorije može se šibat sa nature ili sličnim slikama. dakle prvo odradim skidanje nekih 200 slika i onda ih na random poubacujem u članke za featured sliku i jednu sliku u članku. ukoliko je npr sajt/blog o slonovima onda se mogu naskidati slike slonova i onda na random poubacivat slike u članke.

eto predstavih vam plugin jedan koji je meni zatrebao.

jel ostali misle da je ovo korisno ili da se nema potrebe za ovim jer svako može sa chatgpt ili nekim drugim AI napraviti skoro svaki plugin/skriptu, što mu treba.

oćemo li nastavljat sa temom ili da je ne započinjemo ako nije korisna. ako je korisna mogu ubaciti i plugin koji ubacuje slike kao featured i jednu u post, sve na random. ili plugin koji sve iz medija library resizuje na 1280px širine ili koji konvertuje sve jpeg u webp. za neke stvari postoje plugini ali ovi su jednostavniji i sa jednim klikom se rješava i nema pretjeranih zajebancija sa njima.

no jeste li vi napravili neku zanimljivu skriptu, plugin, neki tool sa AI?

8 Likeova

Nije te strah da je jedna od tih besplatnih slika, zapravo naplatna? I da ce te netko kontaktirat za naplatu?

nije me strah, što bi me bilo. sve su to besplatne slike koje se vuku preko pexels apija.

pisali su već na forumu o pravima na slike i pisao sam i ja svoje mišljenje o tome

nije mi uopšte za priče i polemike dal se smiju koristiti slike sa pexelsa i pixabay i sl sajtova

Ok, ja sam u pocetku koristio AI skriptu za generiranje automatskih clanka, koja bi s pexelsa uzela slike, ali bi ih skripta i obradila. Miror oko vertikale, lagani crop, i promjena stila boja.

Sve to u nadi da ce google gledat sliku kao “novu”, iako moram rec da sam skeptican oko toga.

Na kraju sam se prebacio na Dalle3, gdje bi zatrazio u promptu: “create realistic image off…”, i ako se ne varam vivid mode i to bi u pravilu izgledalo OK.

2 Likeova

@strgan Hajde bas posalji jednu od tih OK slika :slight_smile:
U nekim jako specificnim nisama ima smisla, ali 99% ai-generisanih slika za clanke sto sam vidio izgleda bas lose, pa me eto zivo zanima.

@anja1 znaci ti si u sustini otvorio temu da ljudi dijele ideje jer je kod svakako lagano generisati hehe

Salu na stranu chatgpt postaje ozibljan alat i za kompleksnije projekte, sve dok dobro znas “razbijati” takve ideje na proste.

Ja sam jos prosle godine generisao kod za Windows koji koristi openai dalle api za genrisanje slika preko konzole. Ali naravno, u odnosu na free stock ovo kosta kredita, pogotovo ako se ide u najvecu kvalitetu i rezoluciju

Nema problema, reci naslov clanka pa posaljem sliku clanaka s featured slikom i slikom u tekstu. Sve AI automatizirano.

Kad smo već kod Python skripti koje napravi ChatGPT, jučer sam probao napraviti nešto sa tim. Ali ne za web. Nego za našu mesnicu. :sweat_smile:
Naime, kad dođe npr. juneća polovica u mesnicu, prema pravilnicima koje gleda tržna inspekcija, moramo napraviti kalkulaciju rasjeka mesa. Koliko je tu šnicla, bifteka, ramsteka, kostiju…
Sada pokušavam “nagovoriti” ChatGPT da mi napravi programčić u Pythonu u kojem ćemo mi unesti ukupnu težinu polovice i da me prema unaprijed zadanim postocima izbaci okvirno koliko je to kg pojedinog komada mesa. I bilo bi dobro da mogu kliknuti na “Print” i da mi isprinta izvještaj kalkulacije rasjeka mesa sa današnjim datumom.

Napominjem da ne znam ništa o programiranju ni o Pyhtonu. Tako da mi je već ovo jučer bilo impresivno. Ili je mene lako impresionirati… :sweat_smile:

4 Likeova

Ja sam (već jednom na forumu sam spomenuo) napravio WP plugin za related članke .Pošto ovaj koji je došao uz temu mi se nije sviđao. I eno ga šljaka na sajtu kao da ga je pravio profesionalni programer :smile:

1 Like

The Most Advanced Trends in IT Coming in 2025

Evo iz glave da vidim kako izgleda :slight_smile:

@Brane super ideja :smiley: - ne bi trebalo biti tesko ako svaki komad ima statican broj ovih stavki (ako uvijek za 80Kg trebas dobiti identican broj odrezaka kostiju itd.)

Za printanje ti treba biblioteka (ja sam koristio TCPDF za generisanje Pdf fajla koji se kasnije lako isprinta u standardnim formatima)

1 Like

U suštini je tako, plus da se približi AI ljudima koji ne znaju, i da se vidi kako ljudi koriste AI, šta prave, za šta im treba, zanimljivo mi je sve to.

I ja ječe spravih isto jedan koji ide u članke i pravi boxove ispred svakog drugog podnaslova i iz biksa linkuje ka tri linka na sajtu. Ljepota kod ovih plugina je da rade baš ono što čoek oće

Kad je tek krenuo chatgpt hellas je sa njim napravio TOC plugin koji radi bez greške sa AMP sajtovima. Takav plugin bukvalno ne postoji sem tog, bar tad nije.

1 Like

Ja sam napravila skriptu pomoću GPT-a koja radi automatske klikove na nativne reklame. Kada posetilac uđe u članak i čita ga ništa se ne dešava, ali kada dođe na deo ispod članka skripta izvršava automatski klik na reklamu, bilo da je na PC-u ili na telefonu, skroz nebitno. Skripta ne radi simulaciju klika pa da klikne bot, već baš klikne korisnik koji čita članak, tako da se njemu čini da je slučajno kliknuo na reklamu. Baš zbog toga skriptu je nemoguće otkriti, jer su klikovi prirodni, jedino što može da bude sumnjivo jeste veliki broj klikova. Ali i to sam rešila tako što može da se podesi da se klik izvrši na svakom petom posetiocu, ali ne strogo na svakom petom, već nasumično, da ne bi moglo da se primeti. Skriptu sam testirala na svom sajtu i radi savršeno… Naravno ne koristim je jer mi je svrha pravljenja ove skripte bila samo istraživanje, a ne da nekoga oštetim i da zaradim novac na brzinu.

3 Likeova

Odlična ideja. Da li koristiš to i sa adsense?

Odlicno za ukrast i eventualno dobit i double click, ili eventualno ban, jer ctr od 20% nikako nije normalan.

Takav eventhandler teško da će bilo koji OS dopustiti. To se označi kao potencijalno unsafe aplikacija pa mi nije jasno kako si to uspjela.

Mislim da prodaješ šuplju, …

Šta će ukrasti??? Koliko je normalan CTR za nativne reklame?

pa krades od onih sto placaju oglase

Zato sam gore i napisala da skripta može da se podesi da ne izvršava klik na svakog posetioca već na svakog petog, šestog. CTR od 20% bi bio katastrofa, ne bi mogli da te banuju jer su klikovi od stvarnih posetilaca, ali ti ne bi priznali. Na 20% ti ne bi isplatili čak i da su ti stvarni klikovi, jer bi to smatrali nenormalnim i sumnjivim.

Takođe sam i ovo napisala :point_down: :point_down: :point_down:

@anja1, dobra je tema;) samo pisi.
Ono sto mene zanima je koje API koristite za kreiranje clanaka?
Nemam jos ni jedan AI sajt ali kako je @simeon ozivio temu o zaradi za domaci adsense, sve sam blize pravljenju novih sajtova :slight_smile:

1 Like

Pretpostavljam da je vecini najpristupacniji OpenAI API, @simeon ispravi me ako grijesim

openAI… mislim da svi mogu sad imati API za 4o? ja mozda imam naprednijih verzija posto sam onaj tier5 il koliko vec (najvise sto moze), pa mi je limit kao 200,000e APIja mjesecno

1 Like