Androidアプリ開発入門のFAQとおすすめアンドロイドアプリ・ゲーム紹介サイトです。

Google ページランク

Category:

Web開発

2012年2月2日(木) 6:40 PM

Google ページランク(PR)は、グーグルがウェブページの重要度を0~10まで、11段階で評価したものです。

区分わけは、大体以下のような感じです。

0~3までのサイト:一般的なサイト
4~6までのサイト:人気サイト、有名企業のサイト
7~10までのサイト:ポータルサイト、世界的企業や行政機関などのサイト

例として:

Yahoo: ページランク8
YouTube: ページランク9
Google:ページランクされていない
慶応大学:ページランク8
ホワイトハウス:ページランク9
Sony: ページランク6
Sharp: ページランク7
The U.S. Government’s Official Web Portal:ページランク10

など、2012年2月2日時点では、このようなページランクになっています。

グーグルページランクは、検索で「ページランクチェッカー」などで調べれば、ページランクを調べるツールが出てくるので調べることができます。いちいち調べるのが面倒な方は、「Internet Exploler」にGoogleツールバーをダウンロードして、「検索」→「管理」→「プライバシー」のタブをクリックして、「PageRankを使用してGoogleから見たページの重要度を表示する」にチェックを入れれば、ツールバーに、そのページのページランクが常に表示されるようになります。

ページランクとSEOは別物と言われています。それは、ページランクが高いサイト順に、検索結果が表示されると限らないためです。ページランクを上げる方法は、ページランクの高いサイトからリンクを貼ってもらうことだと言われています。ページランクの高いサイトからどのくらいリンクしてもらえたかで決まるので、SEOと通ずるものはありますが、SEOはその他の要因も関係するため、ページランクを上げることに固執すぎるのは、SEOの観点からだとすこしずれていると思います。

ページランクを偽装しているサイトもあるみたいなので、それらのサイトはSEOチェキなどのツールで調べることができます。

SQLiteの使い方(SQLiteOpenHelperクラス)~その2~

2012年2月2日(木) 11:06 AM

SQLiteの使い方(SQLiteOpenHelperクラス)~その1~で作ったサンプルに、SQLiteのレコードの更新機能と削除機能を追加してみました。

前回のサンプルと同じように、エディットテキストに入力して、「追加」ボタンを押すと、データがデータベースに追加されていきます。

SQLiteの使い方の画像1

「削除」ボタンを押すと、ID番号が一番大きいIDのデータが削除されます。

SQLiteの使い方の画像2

「更新」ボタンを押すと、ID番号が一番大きいIDのデータが「更新しました」に変わります。

SQLiteの使い方の画像3

「削除」ボタンを押すと、ID番号が一番大きいIDのデータが削除されます。

◆◆◆データベース(レコード)の更新◆◆◆
db.update(“testtb”, values, “_id = ?”, new String[] {“1”});

第一引数:テーブル名(String型)
第二引数:カラム値を格納したContentValues型の引数(ContentValues型)
第三引数、第四引数:SQLのWHERE条件文を作成するための引数。(String型、String [] 型)

第三引数、第四引数は、_id=1とかcomment=2などの簡単な条件文じゃないと、デバックが通りませんでした。max関数など複雑な条件文にするときはdb.execSQL(“”);を利用した方がいいかもしれないです。

◆◆◆データベース(レコード、テーブル)の削除◆◆◆
db.delete(“testtb”, “_id = ?”, new String[] {“1”});

第一引数:テーブル名(String型)
第二引数、第三引数:SQLのWHERE条件文を作成するための引数。(String型、String [] 型)

第二引数、第三引数を両方とも「null」にすると、すべてのレコードが削除されます

◆◆◆データベースの削除◆◆◆
File file = new File(“/data/data/com.sample.android.dbsamplea/databases/testdb”);
file.delete();

データベースそのものを削除するときは、file.delete();を使います。最初に、new File(“/data/data/(パッケージ名)/databases/(データベース名)“)でFileオブジェクトを生成し、その後delete();を使って削除します。
(File(“”)の引数は、データベースがあるパスです。Eclipseで、デバッグする場合は、DDMS画面で確認できます。)

↓↓↓修正または追加したファイルのコードは以下の通りです。↓↓↓
(それ以外は、SQLiteの使い方(SQLiteOpenHelperクラス)~その1~で作ったものと同じです。)

「DBSampleA.java」のサンプルコード

package com.sample.android.dbsamplea;

import java.io.File;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class DBSampleA extends Activity implements View.OnClickListener{

	private Button btn[] = new Button[3];
    private EditText edittext;
    private TextView textview;
    private MyDBHelper myhelper;
    private String str;
    private int num = 0;
    private static SQLiteDatabase db;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //ボタンの生成
        btn[0] = (Button)findViewById(R.id.AddButton);
        btn[0].setOnClickListener(this);
        btn[1] = (Button)findViewById(R.id.UpdateButton);
        btn[1].setOnClickListener(this);
        btn[2] = (Button)findViewById(R.id.RemoveButton);
        btn[2].setOnClickListener(this);

        //エディットテキストの生成
        edittext = (EditText)findViewById(R.id.AddEditText);

        //テキストビューの生成
        textview = (TextView)findViewById(R.id.MyTextView);

        //データベースヘルパーの生成
        myhelper = new MyDBHelper(this);
        db = myhelper.getWritableDatabase();
        //db.delete("testtb", null, null);
        Cursor c = db.query("testtb", new String[] {"_id", "comment"}, null, null, null, null, null);
        startManagingCursor(c);
        str = "データベース一覧\n";
        while(c.moveToNext()) {
        	str += c.getString(c.getColumnIndex("_id")) + ":" +
        		c.getString(c.getColumnIndex("comment")) + "\n";
        	num++;
        }

       	textview.setText(str);
    }

    //ボタンクリックイベントの処理
    public void onClick(View v) {

    	ContentValues values = new ContentValues();

    	if(v == btn[0]) {
        	values.put("comment", edittext.getText().toString());
        	db.insert("testtb", null, values);
        	num++;
    	}
    	else if(v == btn[1]) {
    		String[] args = {String.valueOf(num)};
    		values.put("comment", "更新しました");
    		db.update("testtb", values, "_id = ?", args);
    	}
    	else if(v == btn[2]) {
    		String[] args = {String.valueOf(num)};
    		db.delete("testtb", "_id = ?", args);
    		num--;
    	}

        Cursor c = db.query("testtb", new String[] {"_id", "comment"}, null, null, null, null, null);
        startManagingCursor(c);
        str = "データベース一覧\n";
        while(c.moveToNext()) {
        	str += c.getString(c.getColumnIndex("_id")) + ":" +
        		c.getString(c.getColumnIndex("comment")) + "\n";

        }

       	textview.setText(str);

    }

    @Override
    public void onDestroy() {
    	super.onDestroy();
    	myhelper.close();

    	//データベース削除
    	File file = new File("/data/data/com.sample.android.dbsamplea/databases/testdb");
    	file.delete();
    }
}

「main.xml」のサンプルコード

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:id="@+id/AddEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/AddButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="追加"
/>
<Button
android:id="@+id/UpdateButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更新"
/>
<Button
android:id="@+id/RemoveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="削除"
/>
</LinearLayout>

<TextView
android:id="@+id/MyTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>

SQLiteの使い方(SQLiteOpenHelperクラス)~その1~

2012年2月1日(水) 2:45 PM

SQLiteのデータベースを作成し、エディットテキストから入力したデータを登録し、画面に表示するサンプルを作ってみました。

「データベース一覧」に、データベースに登録されているデータが表示されます。

データベース SQLiteの使い方の画像

「five」と入力して、追加ボタンを押すと、一覧に「5:five」と表示され、データベースにデータが追加されていきます。

データベース SQLiteの使い方の画像

◆◆◆SQLiteOpenHelperクラスを継承したクラスの実装◆◆◆

public class MyDBHelper extends SQLiteOpenHelper {

public MyDBHelper(Context context) {
//DBを作成
super(context, “testdb”, null , 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(“CREATE TABLE testtb (_id INTEGER PRIMARY KEY, comment TEXT)”);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

「onCreate」は、データベースを作成した時に呼び出されるメソッドで、「onUpgrade」は、データベースをバージョンアップした時に呼び出されるメソッド。「onCreate」に、データベースのテーブルを作成するコードを書くことが多い

◆◆◆データベースの生成◆◆◆
public MyDBHelper(Context context) {
//ストレージ(ローカルファイル)にDBを作成
super(context, “testdb”, null , 1);
}

第一引数:コンテキスト
第二引数:データベースの名前(String型)
第三引数:とりあえず null にしておけば大丈夫だと思います。(CursorFactory型)
第四引数:データベースのバージョン番号(int型)

◆◆◆SQLの実行◆◆◆
db.execSQL(“CREATE TABLE testtb (_id INTEGER PRIMARY KEY, comment TEXT)”);

” “の中にSQL文を書いて実行することができる。テーブルを作成するだけでなく、レコードの追加(INSERT)、更新(UPDATE)、削除(DELETE)なども実行できる。ただし、検索(SELECT)は発行されないらしいので、db.queryを使う

◆◆◆データベース(レコード)の削除◆◆◆
db.delete(“testtb”, null, null);

第一引数:テーブル名
第二引数、第三引数:SQLのWHERE条件文を作成するための引数。

例えば
db.delete(“testtb”, “_id = ?”, new String[]{“1”});
を実行すると、_id=1のレコードが削除される。
(引数を二つに分けているのは、SQLインジェクション対策だと思われます。)

◆◆◆データベース(レコード)の検索◆◆◆
Cursor c = db.query(“testtb”, new String[] {“_id”, “comment”}, null, null, null, null, null);

第一引数:テーブル名
第二引数:取得するカラム名
第三引数、第四引数:条件文作成のための引数
第五引数:groupBy句の引数
第六引数:having句の引数
第七引数:orderBy句の引数
戻り値はCusor型のオブジェクト

◆◆◆カーソルの使い方◆◆◆
startManagingCursor(c);
while(c.moveToNext()) {
/*データがなくなるまで、ループ処理が繰り返される。
str += c.getString(c.getColumnIndex(“_id”)) + “:” +
c.getString(c.getColumnIndex(“comment”)) + “\n”;
}

startManagingCursor(Cursor c)は、カーソルを自動で管理してくれるメソッドで、このメソッドを呼び出した後、c.moveToNextを呼び出すと、カーソルが最初のデータに移動します。そのあとに、c.moveToNextを呼び出すとデータがなくなるまで、次のデータにカーソルが移動します
c.moveToFirstでも、最初のデータに移動することができますが、カーソルを使い終わった後に、c.closeをする必要があります。これをしないと、デバッグの際にSQLiteCursor.finalize()で強制終了してしまいます。startManagingCursor(Cursor c)は、カーソルのcloseを自動でしてくれるみたいなので、必要ありません。)

◆◆◆データベース(レコード)の追加◆◆◆
db.insert(“testtb”, null, values);

第一引数:テーブル名(String型)
第二引数:nullColumnHack。とりあえずnullで大丈夫だと思います。(String型)
第三引数:カラム値を格納したContentValues型の引数(ContentValues型)

◆◆◆ContentValuesに値を追加する。◆◆◆
ContentValues values = new ContentValues();
values.put(“comment”, edittext.getText().toString());

第一引数:キー値(カラム値)(String型)
第二引数:値(String型、integer型、Long型など)

↓↓↓修正または追加したファイルのコードは以下の通りです。↓↓↓
(それ以外は、新規プロジェクトを生成した時のものと同じです。)

「DBSampleA.java」のサンプルコード

package com.sample.android.dbsamplea;

import java.io.File;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class DBSampleA extends Activity implements View.OnClickListener{

	private Button btn;
    private EditText edittext;
    private TextView textview;
    private MyDBHelper myhelper;
    private String str;
    private static SQLiteDatabase db;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //ボタンの生成
        btn = (Button)findViewById(R.id.AddButton);
        btn.setOnClickListener(this);

        //エディットテキストの生成
        edittext = (EditText)findViewById(R.id.AddEditText);

        //テキストビューの生成
        textview = (TextView)findViewById(R.id.MyTextView);

        //データベースヘルパーの生成
        myhelper = new MyDBHelper(this);
        db = myhelper.getWritableDatabase();

        //データベーステーブルクリア
        db.delete("testtb", null, null);

        //データベースのデータを読み取って表示する。
        Cursor c = db.query("testtb", new String[] {"_id", "comment"}, null, null, null, null, null);
        startManagingCursor(c);
        str = "データベース一覧\n";
        while(c.moveToNext()) {
        	str += c.getString(c.getColumnIndex("_id")) + ":" +
        		c.getString(c.getColumnIndex("comment")) + "\n";
        }

       	textview.setText(str);
    }

    //ボタンクリックイベントの処理
    public void onClick(View v) {

    	//データベースに、データを登録。
    	ContentValues values = new ContentValues();
    	values.put("comment", edittext.getText().toString());
    	db.insert("testtb", null, values);

    	//データベースのデータを読み取って表示する。
        Cursor c = db.query("testtb", new String[] {"_id", "comment"}, null, null, null, null, null);
        startManagingCursor(c);
        str = "データベース一覧\n";
        while(c.moveToNext()) {
        	str += c.getString(c.getColumnIndex("_id")) + ":" +
        		c.getString(c.getColumnIndex("comment")) + "\n";

        }

       	textview.setText(str);

    }

    @Override
    public void onDestroy() {
    	super.onDestroy();
    	myhelper.close();

    	//データベース削除
    	File file = new File("/data/data/com.sample.android.dbsamplea/databases/testdb");
    	file.delete();
    }
}

「MyDBHelper.java」のサンプルコード(追加ファイル)

package com.sample.android.dbsamplea;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDBHelper extends SQLiteOpenHelper {

	public MyDBHelper(Context context) {
		//DBを作成
		super(context, "testdb", null , 1);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("CREATE TABLE testtb (_id INTEGER PRIMARY KEY, comment TEXT)");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

	}
}

「main.xml」のサンプルコード

< ?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<edittext android:id="@+id/AddEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<button android:id="@+id/AddButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="追加"
/>
<textview android:id="@+id/MyTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</linearlayout>

SEOチェキ

Category:

Web開発

2012年1月20日(金) 6:39 PM

SEO対策するうえで、「SEOチェキ」という無料で使えるツールを使うと便利です。

SEOチェキは、調べたいサイトのURLを入力すると、そのサイトのtitle・meta description・meta keywords・h1タグや発リンク数(内部リンク・外部リンク)や読込時間、Googleページランク、Google・Yahoo!の被リンク数・インデックス数、利用ホスト、Twitterのツイート数、Facebookの「いいね!」の数など様々な情報を調べることができるツールです。

僕は、同じ分野の検索順位が上位に来ているサイトなどを調べて、自分のサイトのどこがいけないかなどを調べるときに使っています。

よく見る項目としては、サイトのtitle・meta description・meta keywords・h1タグやGoogleページランク、Google・Yahoo!の被リンク数、被リンク元チェック(同じドメインからの被リンクを含まない)などをよく見ています。

あまりにも多く機能がありすぎて、あまり使いこなせてないですが、知っておいて損しないツールだと思います。今、運営しているサイトのGoogleページランク(PR)が0または、ランクされていないので、なんとか1か2にしたいと思って、他のサイトのSEO情報を調べるときに、SEOチェキを使っています。

初心者のためのSEO対策入門 ~被リンクその2~

Category:

Web開発

2012年1月19日(木) 6:36 PM

SEO対策は、被リンク数が一番効果があると書きましたが、厳密には、リンクしてくれるサイトの質と量(数)です。

例えば、電子タバコは個人で広告をだすのが難しく、SEOで売るしかないらしいのですが、Yahooで「電子タバコ」で検索してみると、上位にもしもドロップシッピングのオーナーが作ったサイトが出てきます。そのサイトのリンク数は16です。リンク数としては、他にもっと多いサイトがあると思うのですが、それらのサイトを抑えて、上位にランクされています。これらのことからも被リンク数だけでなく、リンクしてくれるサイトの質やそれ以外の要因が重要だと言えます。

また、あまりにも質の低いサイト(トップページ1ページだけのサイトなど)からのリンクは、逆に検索順位を下げることになるので、気を付けたほうがいいと思います。

リンクしてくれるサイトは、同じジャンルのサイトの方が良いという話をよく聞きます。例えば、化粧品関係のサイトなら、化粧品関係のサイトにリンクしてもらった方が良いみたいです。
僕は、以前アンドロイド関連のブログに、ドロップシッピングのサイトを相互リンクさせたところ、一気に検索ランキングが下がってしまったことがあります。この原因が他ジャンルのサイトをリンクさせたことによるものなのかどうなのか分かりませんが、できるだけ同じジャンルのものからリンクした方が良いと思います。

まとめると、
SEO対策の被リンクするうえで大切なことは

①被リンクの数(できれば相互リンクより一方向リンク)
②アクセス数の多いサイトなど質の高いからリンクしてもらう。
③できるだけ同じジャンルのサイトからリンクをもらう。

ということが大切です。

* RSS FEED

広告