İçeriğe geç
ArchiLinks
ArchiLinksKaydol

Web sitesi geri bağlantı kontrol aracı: zamanlayabileceğiniz betikler

Buradaki her çağrı curl veya herhangi bir HTTP istemcisiyle çalışır. Anahtarı değiştirin, kalıbı koruyun: çağrı, kaydet, fark.

ArchiLinks araştırma ekibi ·

Merdiven ve zamanlayıcının yanında Python, Node ve Bash araçlarıyla küçük bir atölye tezgahı

Temel kurallar

Bir çağrı, bir fatura. Her istek, satır sayısına bakılmaksızın bir kez ücretlendirilir ve tek bir çağrı en fazla 1.000 satır döndürür. Derin sayfalama 50.000 satırda sona erer ve per 10 ile 5.000 arasında değerler kabul eder.

Bu durum betik yazım şeklinizi değiştirir. per=1000 isteyin ve yalnızca daha fazlasına ihtiyacınız olduğunda sayfa atlayın; küçük sayfalarla kurulan bir web sitesi geri bağlantı kontrol aracı, hiçbir kazanç sağlamadan maliyetinizi on katına çıkarır. Hatalar açıktır: Eksik anahtar için HTTP 401, kredi bittiğinde 402 ve her JSON gövdesi ok içerir.

Otomatikleştirmeden önce

Her betiği küçük bir etki alanı üzerinde tek başına çalıştırın ve JSON'u okuyun. Anahtar adları, satır kapsayıcısı ve sayfalama alanları örneklerimizden değil, gerçek bir yanıttan gelmelidir; bu nedenle bir cron işi bunlara bağlı olmadan önce onları doğrulayın.

Python: Tarihli bir anlık görüntü kaydedin

Yanıttaki alan adları örnektir. Bir anahtara güvenmeden önce bir yanıt yazdırın.

python
import json, sys, datetime, requests

BASE = "https://archilinks.com/api.php"
KEY = "sk_live_..."

def snapshot(domain, action="refdomains"):
    r = requests.get(BASE, params={"action": action, "q": domain, "per": 1000, "key": KEY}, timeout=30)
    if r.status_code in (401, 402):
        sys.exit(f"API said {r.status_code}: check key or balance")
    r.raise_for_status()
    body = r.json()
    assert body.get("ok"), body
    name = f"{domain}-{action}-{datetime.date.today()}.json"
    json.dump(body, open(name, "w"), indent=1)
    print(name, body.get("_credits"))

snapshot(sys.argv[1])

Node: Bir liste için toplu Alan Değerlendirme (DR)

bulk_dr, GET ile bir domains parametresi veya POST gövdesiyle 1 çağrı başına 1 kredi karşılığında 2.000'e kadar etki alanı alır. Aşağıdaki virgül ayırıcı bir örnektir; önce iki etki alanıyla test edin. Node 18 veya üzeri yerleşik fetch'e sahiptir.

javascript
const domains = ["example.com", "example.org"];
const url = new URL("https://archilinks.com/api.php");
url.search = new URLSearchParams({
  action: "bulk_dr",
  domains: domains.join(","),
  key: "sk_live_...",
});

const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(JSON.stringify(await res.json(), null, 2));

Bash ve jq: Haftalık fark

Tarihi içeren bir anlık görüntü kaydedin, ardından iki dosyayı karşılaştırın. Cron işini haftalık veya aylık tutun; indeks yaklaşık olarak aylık olarak yenilenir.

bash
# crontab: 0 6 1 * *  /opt/seo/pull.sh old-shop.com
curl -s "https://archilinks.com/api.php?action=refdomains&q=$1&per=1000&key=$KEY" \
  | jq -S . > "snap-$1-$(date +%F).json"

# compare two dated files
diff <(jq -S . snap-old-shop.com-2026-09-01.json) <(jq -S . snap-old-shop.com-2026-10-01.json) | head -50

Hangi betik için hangi eylem

BetikEylemÇalışma başına maliyetÇıktı
Taşımalar için taban çizgisitoppages, refdomains4 krediİki JSON dosyası
Erişim listesi temizliğibulk_drÇağrı başına 1 kredi, 2.000 etki alanına kadarHer potansiyel müşteri için DR
Rakip örtüşmesiintersect2 kredi2–10 etki alanına bağlantı veren siteler
Çapa izlemeanchors2 krediÇapa metni listesi
Portföy kontrolücompareÇağrı başına 1 kredi, 20 etki alanına kadarYan yana metrikler
Kauçuk yastıklar, alarm zili ve yığılmış para sayacıyla küçük bir yeniden deneme mekanizması

Sınır durumların yönetimi

Betikler sınır durumlarda başarısız olur. Bunları planlayın.

Her çağrıyı üç denemeye kadar bekleme ve pes etme mekanizmasıyla sarın; 401 ve 402 hariç, çünkü bunları bir yeniden deneme düzeltemez. Her kimlik doğrulamalı yanıttan _credits nesnesini günlüğe kaydedin; böylece harcamalardaki artış bakiyede görünmeden önce loglarınızda belirir ve döngüleri bir azami sayfa sayısıyla sınırlayın.

Anlık görüntüleri git veya nesne depolamada dosya adında tarih olacak şekilde saklayın. Basit, sıkıcı, etkili. Taşımalar için bu betikleri yönlendirme haritası tarifi ve taşınma kontrol listesi ile eşleştirin. Google Sheets kullanıcıları UrlFetchApp ile aynı URL'leri Apps Script'ten çağırabilir ve aylık tetikleyicisi olan bir tablo mükemmel bir izleyici olabilir.

Betik soruları

Çoğu betik canlıya alınmadan önce üç soru gelir ve her birinin kısa bir cevabı vardır.

Sitemin kaç geri bağlantısı olduğunu ücretsiz olarak nasıl kontrol ederim?

Anahtarsız olarak genel bakış veya istatistik eylemini çağırın. İkisi de ücretsizdir ve kendi bağlantı indeksimizden toplamları döndürür.

Toplamaların arkasındaki listeler için bir anahtara ve çağrı başına 2 krediye ihtiyacınız vardır.

Bakiye bittiğinde ne olur?

API HTTP 402 döndürür. Betiğiniz döngüde yeniden denememek üzere durmalı ve uyarı vermelidir. Hesap sayfasından USDT (TRC-20) ile yükleyin ve yeniden çalıştırın.

Tarayıcıdan çağrı yapabilir miyim?

Evet. CORS açıktır. Ancak anahtarı genel ön uç kodunda bulundurmayın; çünkü herkes okuyabilir ve kredisini harcayabilir.

Tek bir anahtarla altın paraları verimli bir şekilde hareket ettiren hassas dişlilerli küçük bir konveyör bandı

Kredileri boşa harcamadan sayfalama

Sayfalama, betiklerin sessizce beklenenden daha fazla maliyet yaratmasının bulunduğu yerdir. Her sayfa isteği, kendi ücreti olan ayrı bir çağrıdır; bu nedenle bir sayfa fazla isteyen bir döngü, hiçbir şey için ödeme yapar.

Döngüyü yazmadan önce gerçek bir yanıttan sayfalama alanlarını okuyun. Bu sitedeki örnekler şekli gösterir, ancak adlar ve durma sinyolu canlı JSON'dan gelir.

Kısa bir sayfa geldiğinde durun

Sorduğunuz satır sayısından daha az satır içeren bir sayfa genellikle sonuncudur. Ek bir sayfa isteyerek emin olmak yerine döngünün orada durmasına izin verin.

Yanıt bir total veya next-page alanı içeriyorsa, durma sinyali olarak bunu kullanın. Kaydettiğiniz satırları buna karşı sayın; böylece bir uyumsuzluk logda belirir.

Her döngüyü sınırlayın

Her döngüde sayfa için bir azami sınır belirleyin. Bir alan adı değişirse ve betik aynı sayfayı sormaya devam ederse, bu sınır bakiyenizi korur.

Sınırı beklediğiniz boyuttan seçin, ardından gerçek bir etki alanının daha fazla sayfaya ihtiyacı olduğunda bilinçli olarak artırın.

Her sayfayı geldiği gibi yazın

Sayfa döndüğünde hemen disk kaydedin; dosya adında sayfa numarası olsun. Kırılan bir betik, tekrar başlamak ve iki kez ödemek yerine son kaydedilen dosyadan devam edebilir.

Dosyaları her etki alanı ve tarih için tek bir klasörde tutun; böylece bir yeniden çalıştırma iki çekmeyi karıştırmaz.

Betikleri zamanlanmış olarak çalıştırma

Herhangi bir zamanlayıcı işe yarar. Önemli olan her çalışmanın bir dosya bırakması ve başarısız bir çalışmanın birine haber vermesidir.

İş için bir ana bilgisayar seçme

Cron, diske sahip olduğunuz bir sunucu için uygundur. Bir CI işi, anlık görüntüleri zaten tutan bir depoya uygundur; böylece geçmiş, onu okuyan kodun yanında yaşar.

Hangisini seçerseniz seçin, etki alanı listesini bir dosyada tutun; böylece bir etki alanı eklemek betikte değişiklik yapmaktan ziyade bir düzenlemedir.

Başarısızlıkta uyarı verin, her başarıda değil

Betik başarısız olduğunda veya bakiye seçtiğiniz bir seviyenin altına düştüğünde uyarı verin. Her sabah bir başarı mesajı, insanların gerçek soruyu taşıyan kanalı görmezden gelmesini sağlar.

Python örneğinin yaptığı gibi her çalışmadan _credits nesnesini günlüğe kaydedin ve trendi ayda bir gözden geçirin.

Beş adımda haftalık fark

01

Eylemleri seçin

Sorunuza cevap veren iki veya üç çağrıyı seçin. Her biri kredi maliyetine sahiptir; yanına maliyeti yazın.

02

Ham yanıtı kaydedin

JSON'u geldiği gibi, dosya adında etki alanı ve tarih olacak şekilde saklayın. Biçimlendirme fark adımına kadar bekleyebilir.

03

Karşılaştırmadan önce anahtarları sıralayın

jq -S veya eşdeğerini kullanın; böylece anahtar sırası bir değişiklik olarak görünmez. Yukarıdaki bash örneği bunu yapar.

04

Dosyaları değil listeleri karşılaştırın

İki yanıtı URL veya etki alanına göre birleştirin; sonra eklenen, kaldırılan ve değişenleri raporlayın. Uzun bir dosyanın ham metin farkı üzerinde işlem yapmak zordur.

05

Farkı gözden geçirin ve işlem yapın

Kaldırılan bağlantı veren etki alanlarını erişim listesini yönetene, kaldırılan sayfaları yönlendirmeleri yönetene gönderin.

Bir cron işi betiğe bağlı olmadan önce betiği test etme

İnsansız çalışan bir betik önce kendini kanıtlamalıdır. Küçük bir etki alanı kullanın, tam JSON'u okuyun ve ardından listeyi genişletin.

Hızlı bir mantık kontrolü, toplamları aynı etki alanı için ücretsiz genel bakış çağrısıyla karşılaştırmaktır. Sayıların tam bir ücretli listeyle eşleşmesi gerekmez, ancak ölçek açısından uyuşmalıdır.

İki etki alanıyla çalıştırın

İki etki alanı döngüyü, dosya adlarını ve hata yollarını test eder. Bir etki alanı şansla geçebilir; iki etki alanı döngünün etki alanları arasında sıfırlanıp sıfırlanmadığını gösterir.

İyi bildiğiniz bir etki alanı ve bilmediğiniz bir etki alanı kullanın; böylece çıktının doğru görünüp görünmediğini yargılayabilirsiniz.

Anahtarı loglarda ve biletlerde tutmayın

Betikler genellikle tam istek adresini yazdırır ve anahtar bu adreste bir parametre olarak yer alır. Sunucudan ayrılan herhangi bir satırdan anahtarı temizleyin veya Authorization başlığında gönderin; bu şekilde anahtar adreste kalmaz.

Bir anahtar bir bilet veya genel bir depoda görünürse, onu kullanan zamanlanmış işi bir sonraki çalışmadan önce durdurun.

Anahtarın nerede olduğunu, hangi betiklerin onu okuduğunu ve hangi ana bilgisayarlara çağrı yaptığını içeren kısa bir not tutun. Bu not, bakiyeyi kimin harcayabileceği sorulduğunda ihtiyacınız olan şeydir.

Her soru için eylem seçme

Uç nokta listesinden değil, sorudan başlayın. Bir taşımada hangi URL'lerin bağlantı taşıdığını bilmek gerekir; bir erişim listesinde ise etki alanı puanları. Bir ana bilgisayar, iki soru. Her biri farklı sayıda krediye mal olur.

Kod yazmadan önce sorunun yanına maliyeti yazın. Haftalık çalışan bir betik küçük bir fiyatı elli ikiyle çarpar; bu çarpım, bakiye bunu gösterene kadar kolayca unutulur.

Durdurması gereken yerlerde duran yeniden denemeler

Zaman aşımı veya sunucu hatası gibi geçici bir nedenle başarısız olan bir isteği, denemeler arasında artan bir bekleme süresiyle küçük bir sayıda yeniden deneyin. 401 veya 402'yi yeniden denemeyin; çünkü beklemek bu iki yanıttan hiçbirini değiştirmez.

Her yeniden denemeyi eylem ve etki alanıyla birlikte günlüğe kaydedin; böylece bir hata deseni sessizlik yerine bir desen olarak belirir.

Yeniden deneme sayısını tek bir yerde ayarlayın; böylece betikteki her çağrı aynı kuralı izler. Dağınık yeniden deneme döngileri genellikle birbirleriyle uyuşmaz ve bu uyuşmazlık bir logda bulması zordur.