Archive for janeiro \24\-02:00 2013

Java, Remove OLE headers from images stored as OLE Objects in access database

Posted on janeiro 24, 2013. Filed under: Access, Java | Tags:, , |

If you are using Java to access a MS Access database, and need to retrieve images stored in fields of type OLE Object, then this post can help you. When you insert images into OLE Object fields directly using the MS Access client, and you need to retrieve this image later to use in a desktop application or a web site, you will have a problem. The problem, is that the MS Access insert an OLE Header in the image file registered in database. So you will need to remove the OLE Header to use the image out of the Ms Access. The code below acomplishes this task.

This post is based on:
http://blogs.msdn.com/b/pranab/archive/2008/07/15/removing-ole-header-from-images-stored-in-ms-access-db-as-ole-object.aspx

I just ported the code to Java language.

The code:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * Class to remove OLE Header from images stored as OLE Object
 * @author Douglas.Pasqua
 */
public class OLEImage {
    
    // Map to store the initial block of different images formats
    private Map<String, String> imagesBeginBlock;

    public OLEImage() {
        // inicialize
        imagesBeginBlock = new HashMap<String, String>();
        imagesBeginBlock.put("JPEG", "\u00FF\u00D8\u00FF"); // JPEG
        imagesBeginBlock.put("PNG", "\u0089PNG\r\n\u001a\n"); // PNG
        imagesBeginBlock.put("GIF", "GIF8"); // GIF
        imagesBeginBlock.put("TIFF", "II*\u0000"); // TIFF
        imagesBeginBlock.put("BMP", "BM"); // BMP
    }
   
    public byte[] getByteImgFromOLEInputStream(InputStream input, String imageFormat) {
        // get begin block identifier using imageFormat parameter
        String beginBlock = imagesBeginBlock.get(imageFormat);
        if(beginBlock == null) {
            throw new RuntimeException("Unsupported image format parameter value.");
        }
        
        try {
            byte[] b = toByteArray(input);
            String str = new String(b, "ISO-8859-1");
            
            // identifying the initial position of the image 
            int index = str.indexOf(beginBlock);
            if(index == -1) {
                throw new RuntimeException("Unable to determine image format.");
            }
            
            // removing the OLE Header 
            byte[] buffer = new byte[b.length - index];
            for(int i = 0, a = index; a < b.length; i++, a++) {
                buffer[i] = b[a];
            }
            return buffer;
            
        } catch(IOException e) {
            e.printStackTrace();
        } 
        
        return null;
    }
    
    /**
     * Convert InputStream object to array of bytes
     * @throws IOException 
     */
    public byte[] toByteArray(InputStream is) throws IOException {
        int len;
        int size = 1024;
        byte[] buf;

        if (is instanceof ByteArrayInputStream) {
            size = is.available();
            buf = new byte[size];
            len = is.read(buf, 0, size);
        } else {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            buf = new byte[size];
            while ((len = is.read(buf, 0, size)) != -1) {
                bos.write(buf, 0, len);
            }
            buf = bos.toByteArray();
        }
        return buf;
    }
}

Examples of Use

Using with JPEG, PNG and GIF images on Desktop Applications

Java has native support for JPG, PNG and GIF images. So theses images format will work well with ImageIcon class:

// the class to remove de OLE Headers from OLE Objects
OLEImage oleImage = new OLEImage();

// get OLE object field from access database
// ...

// using with GIF format
InputStream input = rs.getBinaryStream("oleGIF");
byte buffer[] = oleImage.getByteImgFromOLEInputStream(input, "GIF");
ImageIcon icon = new ImageIcon(buffer);

// using with JPEG format
InputStream input = rs.getBinaryStream("oleJPEG");
byte buffer[] = oleImage.getByteImgFromOLEInputStream(input, "JPEG");
ImageIcon icon = new ImageIcon(buffer);

// using with PNG format
InputStream input = rs.getBinaryStream("olePNG");
byte buffer[] = oleImage.getByteImgFromOLEInputStream(input, "PNG");
ImageIcon icon = new ImageIcon(buffer);

Using TIFF and BMP Images on Desktop Applications

Our OLEImage class supports removing OLE Headers for TIFF and BMP images format too. But java doesn’t support these image formats natively. So, you can’t use these formats directly with ImageIcon.

If you are developing for desktop, you will need a alternative method to support these formats. The following links can help you with this task:

http://stackoverflow.com/questions/593830/display-bmp-in-jlabel
http://stackoverflow.com/questions/1567398/showing-tiff-images-in-java
http://stackoverflow.com/questions/9634472/how-to-set-tif-image-to-imageicon-in-java

Using all Image Formats on Web Applications

You are free to use any image format when working in web enviroment. (If you need to send these images from Access database to client browser).

Ler Post Completo | Make a Comment ( None so far )

Facebook, Configurando App como Page Tab

Posted on janeiro 19, 2013. Filed under: Facebook, PHP | Tags:, , |

Usando a aplicação como um Page Tab

Introdução

O Facebook permite que você insira uma aba de uma aplicação dentro de uma fan page. É uma opção ideal para você associar aplicativos promocionais dentro de sua fan page.

Antes é necessário que você já tenha uma aplicação do facebook criada. Para saber mais como criar aplicações para facebook, acesse o link, Criando aplicativos para Facebook usando SDK do PHP.

O próximo passo é configurar a seção chamada Page Tab dentro das configurações da sua App:

ScreenShot040

Principais campos:

  • Page Tab Name: Nome que será exibido na fan page para referenciar a app!
  • Page Tab URL: URL da sua app que será aberto quando o usuário clicar no link da aba na fan page!
  • Secure Page Tab URL: URL da sua app que será aberto quando o usuário clicar no link da aba na fan page (Usado para usuários que acessam o facebook por conexão segura https)!
  • Imagem da guia da página: Imagem da aba que será exibida na fan page!
  • Page Tab Width: Largura máxima da exibição da “aba” da sua app dentro da fan page. A sua app será aberta dentro de uma tag iframe na fan page. Portanto tenha cuidado para não exceder no layout da sua página o limite configurado nesse campo!

PS: (Lembre-se que para configurar um Page Tab é necessário configurar o endereço https (SSL), pois usuários do facebook que usam conexões seguras irão ser direcionados para o link https).

Associando o Pag Tab à uma Fan Page

Para associar a Pag Tab que configuramos anteriormente à uma Fan Page, acesse o endereço abaixo:

https://www.facebook.com/dialog/pagetab?app_id=YOUR_APP_ID&display=popup&next=YOUR_URL

Substiuíndo:

  • YOUR_APP_ID: Pelo App ID da sua aplicação !
  • YOUR_URL: A URL configurada na Page Tab de sua app!

Irá abrir uma página onde você poderá escolher em qual fan page deseja que a app seja incluída. Semelhante à essa:

ScreenShot032

Escolha a fan page desejada e clique no botão Adicionar aba da Página.

Finalizando

Visualizando a sua aba inserida na fan page:

ScreenShot041

Ao clicar no link, você será enviado para dentro da sua app. Ela será aberta em um iframe dentro da fan page.

ScreenShot042

PS: Veja que o botão curtir acima do iframe onde sua app foi aberta, é referente ao curtir da sua fan page e não da sua app.

É muito comum alguns aplicativos promocionais obrigarem os usuários à curtir a fan page antes de poder participar da promoção. Quando você clica no botão Curtir, o próprio mecanismo do facebook irá fazer um refresh na página de sua aplicação, facilitando o desenvolvimento dessa função.

Para saber mais como verificar se o usuário curtiu ou não sua fan page, acesse meu post Facebook, Verificando se usuário curtiu fan page !

Observações

  • Não é possível inserir mais de uma Page Tab à uma app. Portanto, para cada Page Tab que deseje incluir na sua fan page, você terá que criar uma nova aplicação.
Ler Post Completo | Make a Comment ( 13 so far )

Facebook, Verificando se usuário curtiu fan page !

Posted on janeiro 11, 2013. Filed under: Facebook, JavaScript, PHP | Tags:, , |

Introdução

Neste artigo vamos demonstrar como você pode verificar se o usuário que acessa sua aplicação no facebook curtiu ou não uma determinada fan page.

Verificando se o usuário curtiu a fan page

Informações necessárias para nosso script:

  • Ter em mãos o APP_ID e o SECRET da app criada.
  • ID da Fan Page que deseja verificar se o usuário curtiu ou não.
  • Solicitar no mínimo a permissão user_likes, para podermos obter acesso ao likes realizados pelo usuário:
  • // verificar a necessidade de solicitar permissoes
    $permissions = $facebook->api("/me/permissions");
    if(!array_key_exists('user_likes', $permissions['data'][0])) {
            header( "Location: " . $facebook->getLoginUrl(array("scope" => "user_likes")) );
            exit;
    }
    
  • Código:
  • Para obter a informação se o usuário curtiu ou não a fan page, precisamos fazer uma consulta FQL (Facebook Query Language). FQL é uma maneira de solicitar dados de usuário usando um estilo de linguagem parecido com SQL.

    // id do usuário logado
    $facebook_user_id = $facebook->getUser();
    
    // verifica se usuário curtiu a fanpage
    $fql = "SELECT uid FROM page_fan WHERE page_id = '$FANPAGE_ID' AND uid = '$facebook_user_id'";
    $isFan = $facebook->api(array(
              "method" => "fql.query",
              "query"  => $fql,
    ));
    
    if($isFan) {
            echo "Usuário curtiu fanpage!";
    } else {
            echo "Usuário não curtiu fanpage!";
    }
    

Veja que devemos informar qual é o ID da Fan Page que deseja verificar e o ID do usuário que deseja checar. No caso, você pode colocar o id do usuário que esta logado na sua app.

Simples não ? Vamos agora colocar tudo junto em um único script:

<?php
// biblioteca do facebook
require 'src/facebook.php';

// ATENCAO, configurar os parametros abaixo
$APP_ID = ""; // id da app
$SECRET = ""; // secret da app
$FANPAGE_ID = ""; // id da fanpage

// objeto do facebook
$facebook = new Facebook(array(
  'appId'  => $APP_ID,
  'secret' => $SECRET,
));

$facebook_user_id = $facebook->getUser();
if ($facebook_user_id) {
  try {
        // verificar a necessidade de solicitar permissoes
        $permissions = $facebook->api("/me/permissions");
        if(!array_key_exists('user_likes', $permissions['data'][0])) {
                header( "Location: " . $facebook->getLoginUrl(array("scope" => "user_likes")) );
                exit;
        }

        // verifica se usuario curtiu a fanpage
        $fql = "SELECT uid FROM page_fan WHERE page_id = '$FANPAGE_ID' AND uid = '$facebook_user_id'";
        $isFan = $facebook->api(array(
                  "method" => "fql.query",
                  "query"  => $fql,
        ));

        if($isFan) {
                echo "Usuario curtiu fanpage!";
        } else {
                echo "Usuario nao curtiu fanpage!";
        }

  } catch (FacebookApiException $e) {
        echo $e;
        $user = null;
  }
} else {
        // usuario nao logado, solicitar autenticacao
        $loginUrl = $facebook->getLoginUrl();
        header("Location: " . $loginUrl);
        exit;
}

Usando Javascript

Essa função pode ser útil no SDK do facebook para outras linguagens. Destaco o SDK para javascript, que é muito utilizado.

Vejamos como implementar no javascript:

FB.api({
        method: 'fql.query',
        query:  'SELECT uid FROM page_fan WHERE uid=' + user_id + ' AND page_id=' + fanpage_id
    }, function(resp) {
        if (resp.length) {
            alert('Usuario curtiu fanpage!')
        } else {
            alert('Usuario NAO curtiu fanpage!');
        }
    }
);

Colocando o código em um javascript funcional:

<html>
<head>
        <title>Teste de Login Facebook</title>
<script src="http://connect.facebook.net/en_US/all.js"></script>

<script>

// ATENCAO, configurar os parametros abaixo
var app_id = "";
var fanpage_id = "";

FB.init({
        appId  : app_id,
        status: true, cookie: false, xfbml: false, oauth: true
});

function usuarioCurtiuFanpage() {
        var user_id = (FB.getAuthResponse() || {}).userID

        if(!user_id) {
                return false;
        }

        FB.api({
                method: 'fql.query',
                query:  'SELECT uid FROM page_fan WHERE uid=' + user_id + ' AND page_id=' + fanpage_id
            }, function(resp) {
                if (resp.length) {
                    alert('Usuario curtiu fanpage!')
                } else {
                    alert('Usuario nao curtiu fanpage!');
                }
            }
        );
}

function verificaCurtir() {

        FB.getLoginStatus(function(response) {
                if (response.status !== 'connected') {
                        FB.login(function(response) {
                                if (response.authResponse) {
                                        // pronto, usuario logado
                                        usuarioCurtiuFanpage();
                                } else {
                                        alert('Voce nao esta autorizado a usar essa app!');

                                }
                        }, {scope: 'user_likes'});
                } else {

                        // pronto, usuario logado
                        usuarioCurtiuFanpage();
                }
        });

}

</script>
</head>

<body>
<a href="#" onClick="verificaCurtir();">Verificar fanpage</a>

</body>
</html>

Observações

  • Existem outras formas de verificar se o usuário curtiu a fan page. Uma delas é caso você esteja usando a app através de um Page Tab. A informação do curtir a fan page pode ser obtida através do parâmetro signed_request. Caso queira aprender a trabalhar com os dados do signed_request, leia o artigo http://developers.facebook.com/docs/howtos/login/signed-request/

    Boa sorte!!

Ler Post Completo | Make a Comment ( 3 so far )

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: