IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   JSF/JSP/Servlet (https://www.ircforumlari.net/jsf-jsp-servlet/)
-   -   KP Website SEO Analiz Projem (https://www.ircforumlari.net/jsf-jsp-servlet/498269-kp-website-search-engine-optimization-analiz-projem.html)

YazılımMimarı 31 Temmuz 2012 01:32

KP Website SEO Analiz Projem
 
Can sıkıntısına bir ara test amaçlı bir kaç httpparser kütüphanelerini kurcalamışlığım olmuştu. Kurcalarken kendi websitem ile ilgili arama motorları indexleme,alexa global ve yerel sıralama gibi değerleri için birşey yazmaya karar vermiştim. Genel olarak aslında bitmişti çünkü işleyiş olarak bir her segmenti kodun aynı olacaktır. Daha sonra kendi sunucumda websiteme bir subdomain açıp, uygulamayı orada teste açağım ve açık kaynaklı olacağı için bütün kod sirkülasyonunu ve araçları bu başlık altında paylaşacağım. Kullanmak isteyen arkadaşlar kullanabilir.

Uygulama olduğu gibi java tabanlıdır. Hızlı olması için web tabanlı arayüzde JSP kullandım. Uygulama sunucusu Apache Tomcat'tir. Kullandığım HttpParser kütüphanesi ise açık kaynaklı bir proje olan HtmlUnit'tir.

İlk test ettiğim Google indexleme bilgisi onu paylaşayım.

index.jsp sayfam ve içeriğinde Google indexleme yapan kod.
PHP- Kodu:

<%-- 
    
Document   index
    Created on 
Jul 3120129:23:12 PM
    Author     
turgay
--%>

<%@ 
page import="ThirdPartyApp.Count"%>
<%@ 
page import="ThirdPartyApp.PageRank"%>
<%@ 
page import="com.gargoylesoftware.htmlunit.html.HtmlDivision"%>
<%@ 
page import="com.gargoylesoftware.htmlunit.BrowserVersion"%>
<%@ 
page import="com.gargoylesoftware.htmlunit.html.HtmlPage"%>
<%@ 
page import="com.gargoylesoftware.htmlunit.WebClient"%>
<%@ 
page contentType="text/html" pageEncoding="UTF-8"%>
<!
DOCTYPE html>
<
html>
    <
head>
        <
meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <
title>KP Website SEO Analiz Projesi</title>
    </
head

    
<body>
    <
h1>KP Website SEO Analiz Projesi Alfa Test Sürümü</h1>
        <
form action="index.jsp" method="POST">
            <
input type="text" name="website" value="" />
            <
b>Ornek "
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700"></
b>
            <
input type="submit" value="GÖNDER" />
        </
form>
        <%
            
Count cnt = new Count();
            
int lastRecord 0;
            
boolean istCheck false;
            if (
cnt.ReadLastRecordNoFromFile() != && cnt.ReadLastRecordNoFromFile() != null) {
                
lastRecord cnt.ReadLastRecordNoFromFile();
                
istCheck true;
            }
            try {
                if (
istCheck) {
                    
long maxHeapSize Runtime.getRuntime().maxMemory();
                    
out.println("<b>JVM Max Heap Size : </b>" maxHeapSize "<br>");
                    
long totalHeapSize Runtime.getRuntime().totalMemory();
                    
out.println("<b>JVM Total Heap Size : </b>" totalHeapSize "</br>");
                    
long freeHeapSize Runtime.getRuntime().freeMemory();
                    
out.println("<b>JVM Free Heap Size : </b>" freeHeapSize "<br>");
                    
long processors Runtime.getRuntime().availableProcessors();
                    
out.println("<b>Processors : </b>" processors "</br>");
                    
String website "";
                    if (!
"".equals(request.getParameter("website")) && request.getParameter("website") != null) {
                        
website request.getParameter("website").toString().toLowerCase().trim();
                        
out.println("<b>Website :</b>" website "<br>");
                        final 
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
                        
HtmlPage pageC webClient.getPage("
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700">+ 
website);
                        
HtmlDivision div pageC.getHtmlElementById("resultStats");
                        
int googleStartIndex div.asText().indexOf("Yaklaşık") + 9;
                        
int googleEndIndex div.asText().indexOf("sonuç");
                        
String googleIndexCounter div.asText().substring(googleStartIndexgoogleEndIndex); 
                        
out.println("<b>Google Index : </b>" googleIndexCounter "<br>");
                        
webClient.closeAllWindows();
                        
lastRecord lastRecord 1;                       
                        
java.util.Date d = new java.util.Date();                         
                        
cnt.WriteNewRecordToFile(lastRecord " , " website " , " googleIndexCounter " , " d.toGMTString().substring(0d.toGMTString().length()-3) + ":"); 
                        
out.println("<b>PageRank : </b>" "Test aşamasında.." "</br>");
                    } else {
                        
out.println("<b>Website adı giriniz.</b></br>");
                    }
                }
            } catch (
Exception e) {
                
out.println("<div style=\"color:red;\"><b>Hata Oluştu</b></div>");
                
//e.getMessage();
            
} finally {
                
out.println("<div style=\"color:red;\">Sorgu Sayısı : <b>" lastRecord "</b></div>");
                
out.println("<h2><b>Son 50 sorgulanan kayıt</b><br></h2>");
                
out.println("<h4><b>Sıra, Domain , Index Sayısı, Sorgu Tarihi</b><br></h4>");
                for (
Object str cnt.ReadLastFiftyRecordFromFile()) {
                    
out.println("<b>" str "<br>");
                }
            }
        %>
    </
body>
</
html

Sorgu yapılan domain ve verilerini tutmak için bit txt dosyası kullandım. count.txt


Count.java
PHP- Kodu:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ThirdPartyApp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/**
 *
 * [MENTION=21475]AuthoR[/MENTION] turgay
 */
public class Count {

    private static 
String path "\\WebApplication3\\web\\count.txt";
    
//Counstructor

    
public Count() {
    }

    
//Dosyadan okuma
    
@SuppressWarnings({"ConvertToTryWithResources""UseSpecificCatch"})
    public 
Integer ReadLastRecordNoFromFile() throws IOException {
        
BufferedReader in null;
        try {
            
in = new BufferedReader(new FileReader(path));
            
String str = new String();
            
String[] strArray null;
            while (
in.ready()) {     
                
strArray in.readLine().split(",");                
                
str strArray[0];
            }
            return 
Integer.valueOf(str.trim());
        } catch (
Exception e) {
            
e.printStackTrace();
            return 
0;
        } finally {
            
in.close();
        }
    }

    
//Dosyadan son 50 kayıdı okuma
    
@SuppressWarnings("ConvertToTryWithResources")
    public 
ArrayList ReadLastFiftyRecordFromFile() {
        
ArrayList<StringstrList = new ArrayList<>();
        try {
            
BufferedReader in = new BufferedReader(new FileReader(path));
            
int counter 0;
            
String str;
            while (
in != null) {
                
str in.readLine();
                if (
counter == 50 || str == null) {
                    break;
                }
                
strList.add(str.substring(0str.length() - 1));
                
counter counter 1;
            }
            
in.close();
            return 
strList;
        } catch (
Exception e) {
            
strList.add("Liste şuan boş..");
            return 
strList;
        }
    }

    
//Dosyaya yazma
    
@SuppressWarnings("ConvertToTryWithResources")
    public 
boolean WriteNewRecordToFile(String info) {
        try {
            
BufferedWriter out = new BufferedWriter(new FileWriter(pathtrue));
            
out.write(info "\n");
            
out.close();
            return 
true;
        } catch (
Exception e) {
            return 
false;
        }
    }


Uygulamanın alfa test sürümünü aksilik olmazsa cumartesi subdomain'e ekleyip yayınlayacağım.

YazılımMimarı 02 Ağustos 2012 08:39

Cevap: KP Website SEO Analiz Projem
 
Uygulamanın Alfa test sürümünü yayına açtım. Test etmek isteyen ve fikir belirtmek arkadaşlar
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

buradan test edip, geri bildirimler yapabilirler. Projeye eklenecek kısımlar.


Yahoo, Bing, Yandex arama motorlarının index sonuçları, Alexa global ve yerel sıralama sonucu, Alexa backlink sonucu, PageRank değeri, Kontrol amaçlı güvenlik kodu sorgulaması ve basitten olsa bir db servisi şuan txt üzerinde verileri saklıyorum.

Kaynak kodları ilk mesaj altında paylaşacağım.

YazılımMimarı 05 Ağustos 2012 07:30

Cevap: KP Website SEO Analiz Projem
 
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

Sürüm yeniledim V0.1 test sürümü
Bu sürümde aşağıdaki özellikleri ekledim,
css, java script, jquery kütüphanelerini ekledim şuan aktif kılmasamda flexi datatable java script kütüphanesinide ekledim.

Ajax ile json veri tipinde veri gönderme ve alma işlemlerini yaptım. index.jsp sayfası içindeki kod bloğunu kaldırıp, olduğu gibi java sınıflarına aktardım. Basit bir cift katmanlı mimari oluşturdum.

Kodları yakın bir zamanda güncel bir şekilde eklerim.

YazılımMimarı 10 Ekim 2012 10:36

Cevap: KP Website SEO Analiz Projem
 
Şuan bir çok kısmını bitirip yayına soktum beta versiyonunu. Sadece Google PR değerini şuan eklemedim. Diğer bütün bilgilerini sitelerin alabiliyor ve en güzel özelliği her sitenin bilgisini kayıt altına alıp sabitliyorum ve 2 gün sonrada sorgulama yaptığında aşağıdaki data tablosundan Ara(Büyüteç ikonu) butonuna basarak sitesini günlük sorguladığı takdirde önceki sorgulamalarını görebiliyor. Hatta şuana kadar sorgulanmış bütün site verilerinide görebilir. Amacım bu verileri ileride anlamlandırmak.

Mesela, kodlapaylas.com bugun 1530 Google Index'i var. 1 hafta sonra 1400'e düştü bu düşüşün diğer veriler ile ilgili analizinide yapacağım. Son 1 ay'da Alexa değerim yükselirken, Google Index değerim düşmüş gibi :)

Siteye girip, test yapabilirsiniz.

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

Unutmadan yakında bütün kaynak kodları uygulamanın dökümentasyonunu yaparak paylaşacağım.

YazılımMimarı 17 Ekim 2012 23:48

Cevap: KP Website SEO Analiz Projem
 
Arka tarafta çalışan kod sirkülasyonun hepsi;

Her metod bir kriteri karşılyıor genelde, Kod blogları içinde commentler ile kod açıklamalarını yaptım. Her metoddan dönen değerleri, ilk mesajımdaki gibi jsp sayfası içine scriptlet tag leri içine yazabilirsiniz.



Kod:

package ThirdPartyApp;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import java.io.IOException;

/**
 *
 * @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] turgay
 */
public class Indexes {

    static WebClient webClient = null;

    public Indexes() {

    }

//Bu metod aşağıdaki bütün metodları sırası ile çalıştırıp, dönen değerleri
//StringBuilder nesnesi içine append ediyor ve metod String bir değer geri
//dönüyor bunuda seo.kodlapaylas.com'da bir sorgulama yaptıgınızda
//sonucların geldiği kısım olarak söylenebilir
    public StringBuilder startWebSiteAnalyze(String website) {
        StringBuilder sb = null;
        try {
            sb = new StringBuilder();
            cnt.setSeoDomain(website);
            sb.append(googleIndex(website));
            sb.append(yahooIndex(website));
            sb.append(bingIndex(website));
            sb.append(yandexIndex(website));
            sb.append(alexaValues(website));
            sb.append(googleBackLink(website));
            sb.append(isDmoz(website));
            if (cnt.InsertNewQuery() == true) {
                return sb;
            } else {
                return sb;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return sb;
        }
    }


//Google arama motoru index istatistik değerini getiren metod
    private String googleIndex(String website) {
        String returningValue = "";
        try {
            webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
            webClient.setThrowExceptionOnScriptError(false);
            webClient.setThrowExceptionOnFailingStatusCode(false);
            webClient.setCssEnabled(false);
            webClient.setRedirectEnabled(false);
            webClient.setJavaScriptEnabled(false);
            HtmlPage pageC = webClient.getPage("
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
website);
            HtmlDivision div = pageC.getHtmlElementById("resultStats");
            int googleStartIndex = div.asText().indexOf("Yaklaşık") + 9;
            int googleEndIndex = div.asText().indexOf("sonuç");
            String googleIndexCounter = div.asText().substring(googleStartIndex, googleEndIndex);
            returningValue = "<b>Google Index : </b>" + googleIndexCounter + "<br>";
            webClient.closeAllWindows();
            return returningValue;

        } catch (Exception e) {
            e.printStackTrace();
            return returningValue;
        }
    }

//Google BackLink sayısını getiren metod
    private String googleBackLink(String website) {
        String returningValue = "";
        try {
            webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
            webClient.setThrowExceptionOnScriptError(false);
            webClient.setThrowExceptionOnFailingStatusCode(false);
            webClient.setCssEnabled(false);
            webClient.setRedirectEnabled(false);
            webClient.setJavaScriptEnabled(false);
            HtmlPage pageC = webClient.getPage("https://
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
website);
            HtmlDivision div = pageC.getHtmlElementById("resultStats");
            String googleBackLinkCounter = "";
            if (div.asText().contains("Yaklaşık")) {
                int googleStartIndex = div.asText().indexOf("Yaklaşık") + 9;
                int googleEndIndex = div.asText().indexOf("sonuç");
                googleBackLinkCounter = div.asText().substring(googleStartIndex, googleEndIndex);
                returningValue = "<b>Google BackLink : </b>" + googleBackLinkCounter + "<br>";
            } else {
                returningValue = "<b>Google BackLink : </b>" + "0" + "<br>";
            }
            webClient.closeAllWindows();
            return returningValue;

        } catch (Exception e) {
            e.printStackTrace();
            return returningValue;
        }
    }

//Yahoo arama motoru istatistiklerini getiren metod
    private String yahooIndex(String website) {
        String returningValue = "";
        try {
            webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
            webClient.setThrowExceptionOnScriptError(false);
            webClient.setThrowExceptionOnFailingStatusCode(false);
            webClient.setCssEnabled(false);
            webClient.setRedirectEnabled(false);
            webClient.setJavaScriptEnabled(false);
            HtmlPage pageC = webClient.getPage("http://search.yahoo.com/search?p=site:" + website);
            HtmlDivision div = pageC.getHtmlElementById("cnt-wrap");
            String yahooIndexCounter = div.asText().substring(0, div.asText().length() - 7);
            returningValue = "<b>Yahoo Index : </b>" + yahooIndexCounter + "<br>";
            webClient.closeAllWindows();
            return returningValue;
        } catch (Exception e) {
            e.printStackTrace();
            return returningValue;
        }
   
}

//Bing arama motoru istatistiklerini getiren metod
    private String bingIndex(String website) {
        String returningValue = "";
        try {
            webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
            webClient.setThrowExceptionOnScriptError(false);
            webClient.setThrowExceptionOnFailingStatusCode(false);
            webClient.setCssEnabled(false);
            webClient.setRedirectEnabled(false);
            webClient.setJavaScriptEnabled(false);
            HtmlPage pageC = webClient.getPage("
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
website);
            HtmlDivision div = pageC.getHtmlElementById("sw_main");
            int bingEndIndex = div.asText().indexOf("results");
            String bingIndexCounter = div.asText().substring(0, bingEndIndex);
            returningValue = "<b>Bing Index : </b>" + bingIndexCounter + "<br>";
            webClient.closeAllWindows();
            return returningValue;
        } catch (Exception e) {
            e.printStackTrace();
            return returningValue;
        }
    }

//Yandex arama motoru istatistiklerini getiren metod
    private String yandexIndex(String website) {
        String returningValue = "";
        try {
            webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
            webClient.setThrowExceptionOnScriptError(false);
            webClient.setThrowExceptionOnFailingStatusCode(false);
            webClient.setCssEnabled(false);
            webClient.setRedirectEnabled(true);
            webClient.setJavaScriptEnabled(true);
            HtmlPage pageC = webClient.getPage("http://yandex.com.tr/yandsearch?text=site:" + website);
            String div = pageC.asText();
            int yandexBeginIndex = div.indexOf("Yandex: ") + 7;
            int yandexEndIndex = div.indexOf("sonuç");
            String yandexIndexCounter = div.substring(yandexBeginIndex, yandexEndIndex);
            returningValue = "<b>Yandex Index : </b>" + yandexIndexCounter + "<br>";
            webClient.closeAllWindows();
            return returningValue;
        } catch (Exception e) {
            e.printStackTrace();
            return returningValue;
        }
    }

//Alexa içindeki global, yerel ve backlink değerleri
    private String alexaValues(String website) throws IOException {
        String returningValue = "";
        try {
            webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
            webClient.setThrowExceptionOnScriptError(false);
            webClient.setThrowExceptionOnFailingStatusCode(false);
            webClient.setCssEnabled(false);
            webClient.setRedirectEnabled(true);
            webClient.setJavaScriptEnabled(true);
            HtmlPage pageC = webClient.getPage("
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
website);
            HtmlDivision htmlDiv = pageC.getHtmlElementById("search");
            String tableHtml = htmlDiv.asText();
            String myNecessaryBlock = tableHtml.substring(tableHtml.indexOf("Alexa Traffic"), tableHtml.indexOf("Star"));
            int alexaGlobalBeginIndex = myNecessaryBlock.indexOf("Alexa Traffic Rank:") + 19;
            int alexaGlobalEndIndex = 0;
            if (myNecessaryBlock.contains("No regional data")) {
                alexaGlobalEndIndex = myNecessaryBlock.indexOf("No regional data");
            } else if (myNecessaryBlock.contains("Traffic Rank in")) {
                alexaGlobalEndIndex = myNecessaryBlock.indexOf("Traffic Rank in");
            }
            String alexaGlobal = myNecessaryBlock.substring(alexaGlobalBeginIndex, alexaGlobalEndIndex);
            int alexaLocalBeginIndex = 0;
            String alexaLocal = "";
            if (tableHtml.contains("Traffic Rank in")) {
                alexaLocalBeginIndex = myNecessaryBlock.indexOf("Traffic Rank in ") + 16;
                int alexaLocalEndIndex = myNecessaryBlock.indexOf("Sites Linking In:");
                alexaLocal = myNecessaryBlock.substring(alexaLocalBeginIndex, alexaLocalEndIndex);
            } else if (tableHtml.contains("No regional data")) {
                alexaLocal = "No regional data";
            }

            int alexaBackLinkBeginIndex = tableHtml.indexOf("Sites Linking In:") + 17;
            int alexaBackLinkEndIndex = tableHtml.indexOf("Star");
            String alexaBackLink = tableHtml.substring(alexaBackLinkBeginIndex, alexaBackLinkEndIndex - 4);
            returningValue = "<b>Alexa Global : </b>" + alexaGlobal + "<br>"
                    + "<b>Alexa Local : </b>" + alexaLocal + "<br>"
                    + "<b>Alexa BackLink : </b>" + alexaBackLink + "<br>";
            webClient.closeAllWindows();
            return returningValue;
        } catch (Exception e) {
            e.printStackTrace();
            return returningValue;
        }
    }

//DMoz kaydının olup olmadığı kontrolü
    private String isDmoz(String website) {
        String returningValue = "";
        try {
            boolean isDmoz = false;
            webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
            webClient.setThrowExceptionOnScriptError(false);
            webClient.setThrowExceptionOnFailingStatusCode(false);
            webClient.setCssEnabled(false);
            webClient.setRedirectEnabled(false);
            webClient.setJavaScriptEnabled(false);
            HtmlPage pageC = webClient.getPage("
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
website);
            HtmlDivision div = pageC.getHtmlElementById("bd-cross");
            if (div.asText().contains("Open Directory Categories")) {
                returningValue = "var";
                isDmoz = true;
            } else {
                returningValue = "yok";
                isDmoz = false;
            }
            returningValue = "<b>Dmoz Kaydı : </b>" + returningValue + "<br>";
            webClient.closeAllWindows();
            return returningValue;

        } catch (Exception e) {
            e.printStackTrace();
            return returningValue;
        }
    }
}

Uygulamayı implemente ederken problem yaşarsanız konu altında belirtebilirsiniz. Uygun zamanımda yardımcı olmaya çalışırım.

Daha detaylı dökümentasyonunu sitemde yapıp, konu başlığına ekleyeceğim.

YazılımMimarı 14 Ekim 2014 23:39

Cevap: KP Website SEO Analiz Projem
 
Sitedek i url yapısını değiştirmiştim güncellemeyi unuttumuşum burda :) Test amaçlı ilk başlarda yazmıştım subdomain olarak eklediydim, artık aşağıdaki linkte uygulamaya erişilebilir.

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 23:28.

Powered by vBulletin® Version 3.8.8 Beta 3
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2024 IRCForumlari.Net