Προς το περιεχόμενο

Διαφορετικές αναλύσεις βίντεο ανάλογα το μέσο πρόσβασης...πώς το κάνω?


Blondeamon

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα

 

 

πειραματίζομαι τελευταία με διάφορα και σε συζήτηση με ένα φιλαράκι μου είπε οτι καλό θα ήτανε να μπορεί να κατεβάζει και απτο κινητό του κάποια βίντεο που έχω στο forum μου αλλά σε μικρότερη ανάλυση.

 

Ξέρετε κάποιον τρόπο που να μπορώ να ανιχνέυω αν μπαίνει απο desktop ή απο κινητό και να αλλάζω το βίντεο που του στέλνω. Για δοκιμή πχ ας πούμε οτι έχω μια απλή σελίδα με ενα link για download ενος μονάχα βίντεο και τπτ άλλο. Αλλά πώς θα το κάνω να στέλνει πχ 1280χ1024 σε υπολογιστή και 120χ100 πχ σε κινητό ?

Δημοσ.

Ενδιαφέρον το ερώτημά σου.

 

Δεν έχει τύχει ποτέ να κάνω κάτι αντίστοιχο αλλά μου έρχονται 3 λύσεις στο μυαλό αυτή την στιγμή:

 

1η λύση, που μου έρχεται (και δεν μου αρέσει) είναι να έχεις κάτω από το Video, "View for mobile devices" και να ξαναφορτώνει η σελίδα με το low resolution video.

 

2η λύση, μπορείς να ελέγχεις το $_SERVER['HTTP_USER_AGENT'] variable πριν φορτώσεις το site. Βρήκα ένα έτοιμο implementation (με PHP δεν ασχολήσε; ή θυμάμαι λάθος; ) εδώ:

 

http://www.russellbeattie.com/blog/mobile-browser-detection-in-php

 

Δεν με τρελλαίνει και πολύ γιατί η λίστα θα χρειάζεται *ίσως* σχετικά συχνά updates, αλλά you get the idea.

 

3η λύση λύση, είναι να έφτιαχνα ένα subdomain http://mobiles.mysite.gr και στο κώδικά μου να έλεγχα το $_SERVER['HTTP_HOST'] οπότε άμα κάποιος έρχεται από το 'mobiles' subdomain να φόρτωνα απευθείας τα low resolution videos. Μάλλον αυτή μου αρέσει και περισσότερο από τις άλλες 2 προς το παρόν.

 

Αν μου έρθει και κάτι άλλο θα σου πω.

Δημοσ.

Πωπω με έψησες τώρα απίστευτα , είσαι τρομερός.

 

Θα τα δοκιμάσω και θα σου πώ. Προς το παρόν ψήνομαι να δοκιμάσω την 2 και βλέπω και για 3.

Δημοσ.

Μάλλον και εγώ με την 2η θα ξεκίναγα, έτσι να δω από περιέργεια πως θα πάει αλλά στο τέλος μου φαίνεται ο καλύτερος συνδυασμός θα ήταν (2) + (3) εκτός φυσικά άμα υπάρχει και καμία καλύτερη λύση που δεν αναφέραμε.

 

Πες μας και εμάς τα αποτελέσματα :)

Δημοσ.

Έτσι θα σε άφηνα? :P Μου έδωσες τα φώτα σου και μπόρεσα και πήρα μπρός.

 

λοιπόν, αυτη ειναι η σελίδα που το σήκωσα και δουλεύει υπέροχα!

 

http://blondeamon.kamenos.gr/Files/maniakos_rules.php

 

Aν μπεις απο pc σου εμφανιζει μονο τα αποτελεσματα της $_SERVER['HTTP_USER_AGENT'] με μια echo αν ομως μπεις απο mobile θα σου εμφανιζει "MOBILE VERSION".

 

 

 

Δοκίμασε το με:

http://www.opera.com/mini/demo/

 

 

Ο κώδικας ειναι:

 

<?php

echo $_SERVER['HTTP_USER_AGENT'];

 

 

 

 

 

>$isMobile = false;
$isBot = false;

$op = strtolower($_SERVER['HTTP_X_OPERAMINI_PHONE']);
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
$ac = strtolower($_SERVER['HTTP_ACCEPT']);
$ip = $_SERVER['REMOTE_ADDR'];

$isMobile = strpos($ac, 'application/vnd.wap.xhtml+xml') !== false
       || $op != ''
       || strpos($ua, 'sony') !== false 
       || strpos($ua, 'symbian') !== false 
       || strpos($ua, 'nokia') !== false 
       || strpos($ua, 'samsung') !== false 
       || strpos($ua, 'mobile') !== false
       || strpos($ua, 'windows ce') !== false
       || strpos($ua, 'epoc') !== false
       || strpos($ua, 'opera mini') !== false
       || strpos($ua, 'nitro') !== false
       || strpos($ua, 'j2me') !== false
       || strpos($ua, 'midp-') !== false
       || strpos($ua, 'cldc-') !== false
       || strpos($ua, 'netfront') !== false
       || strpos($ua, 'mot') !== false
       || strpos($ua, 'up.browser') !== false
       || strpos($ua, 'up.link') !== false
       || strpos($ua, 'audiovox') !== false
       || strpos($ua, 'blackberry') !== false
       || strpos($ua, 'ericsson,') !== false
       || strpos($ua, 'panasonic') !== false
       || strpos($ua, 'philips') !== false
       || strpos($ua, 'sanyo') !== false
       || strpos($ua, 'sharp') !== false
       || strpos($ua, 'sie-') !== false
       || strpos($ua, 'portalmmm') !== false
       || strpos($ua, 'blazer') !== false
       || strpos($ua, 'avantgo') !== false
       || strpos($ua, 'danger') !== false
       || strpos($ua, 'palm') !== false
       || strpos($ua, 'series60') !== false
       || strpos($ua, 'palmsource') !== false
       || strpos($ua, 'pocketpc') !== false
       || strpos($ua, 'smartphone') !== false
       || strpos($ua, 'rover') !== false
       || strpos($ua, 'ipaq') !== false
       || strpos($ua, 'au-mic,') !== false
       || strpos($ua, 'alcatel') !== false
       || strpos($ua, 'ericy') !== false
       || strpos($ua, 'up.link') !== false
       || strpos($ua, 'vodafone/') !== false
       || strpos($ua, 'wap1.') !== false
       || strpos($ua, 'wap2.') !== false;

       $isBot =  $ip == '66.249.65.39' 
       || strpos($ua, 'googlebot') !== false 
       || strpos($ua, 'mediapartners') !== false 
       || strpos($ua, 'yahooysmcm') !== false 
       || strpos($ua, 'baiduspider') !== false
       || strpos($ua, 'msnbot') !== false
       || strpos($ua, 'slurp') !== false
       || strpos($ua, 'ask') !== false
       || strpos($ua, 'teoma') !== false
       || strpos($ua, 'spider') !== false 
       || strpos($ua, 'heritrix') !== false 
       || strpos($ua, 'attentio') !== false 
       || strpos($ua, 'twiceler') !== false 
       || strpos($ua, 'irlbot') !== false 
       || strpos($ua, 'fast crawler') !== false                        
       || strpos($ua, 'fastmobilecrawl') !== false 
       || strpos($ua, 'jumpbot') !== false
       || strpos($ua, 'googlebot-mobile') !== false
       || strpos($ua, 'yahooseeker') !== false
       || strpos($ua, 'motionbot') !== false
       || strpos($ua, 'mediobot') !== false
       || strpos($ua, 'chtml generic') !== false
       || strpos($ua, 'nokia6230i/. fast crawler') !== false;

if($isMobile){
echo "MOBILE VERSION";
 // header('Location: http://m.mowser.com/web/' . urlencode($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']));
  exit();
}

?>

 

 

 

Αν κάποιος εχει κινητο που μπορει να μπει online και το δοκιμάσει θα ήμουν ευγνωμων.

Δημοσ.

Mέχρι αύριο θα είναι έτοιμο, ευχαριστώ και πάλι για την βοήθεια και τις υποδέιξεις!

 

Υ.Γ Μάλλον θα υλοποίησω και το νο3, just in case.

Δημοσ.

Τη javascript γιατί την αποκλείσατε, αν επιτρέπεται? Μπορεί να σου πει την ανάλυση της οθόνης ή/και του παραθύρου, που είναι και το ζητούμενο.

 

Το browser sniffing είναι μεγαααλη ιστορία χωρίς τελειωμό. Το browscap.ini έχει φτάσει στα 325KB!

 

Επί της συγκεκριμένης λύσης, θα ήθελα να προτείνω και έναν (έξτρα) έλεγχο του στυλ preg_match('~.*\(d{3})x(\d{3}).*~', $ua, $M) καθώς πολλοί mobile browsers περιέχουν και την ανάλυση στο user agent string, κάτι που δε συμβαίνει στους desktop.

Δημοσ.
Τη javascript γιατί την αποκλείσατε, αν επιτρέπεται? Μπορεί να σου πει την ανάλυση της οθόνης ή/και του παραθύρου, που είναι και το ζητούμενο.

 

Το browser sniffing είναι μεγαααλη ιστορία χωρίς τελειωμό. Το browscap.ini έχει φτάσει στα 325KB!

 

Επί της συγκεκριμένης λύσης, θα ήθελα να προτείνω και έναν (έξτρα) έλεγχο του στυλ preg_match('~.*\(d{3})x(\d{3}).*~', $ua, $M) καθώς πολλοί mobile browsers περιέχουν και την ανάλυση στο user agent string, κάτι που δε συμβαίνει στους desktop.

 

Θα μπορούσες να προτείνεις κάποιο τρόπο για την ανίχνευση αν ειναι απο κινητο ipod ή pda πχ?

Δημοσ.

Με με μπερδεύεις με gadgets, ούτε κινητό δεν έχω :shifty:

 

Απ' ότι κατάλαβα το ζητούμενο είναι περιεχόμενο με βάση την ανάλυση. Αυτό μπορεί να γίνει κάπως έτσι (untested):

 

>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>

<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <title>Test Page</title>
   <?php
   if (empty($_GET['stp']))
   {
   ?>
   <script type="text/javascript">
       var wid,hgt;
       if (typeof(window.innerWidth) != 'undefined')
       {
           wid = window.innerWidth;
           hgt = window.innerHeight;
       }
       else
       if (document.documentElement && document.documentElement.clientWidth)
       {
           wid = document.documentElement.clientWidth;
           hgt = document.documentElement.clientHeight;
       }
       else
       if (document.body && document.body.clientWidth)
       {
           wid = document.body.clientWidth;
           hgt = document.body.clientHeight;
       }
       else
       {
           wid = 0;
           hgt = 0;
       }
       window.location.href = window.location.href+'?stp=1&wid='+wid+'&hgt='+hgt;
   </script>
   <?php
   }
   ?>

</head>

<body>
<?php
if (empty($_GET['stp']))
{
   echo "no js, use browser sniffing...";
}
else
{
   $wid = @$_GET['wid'];
   $hgt = @$_GET['hgt'];

   echo "You are viewing this at {$wid}x{$hgt}!";
}
?>

</body>

</html>

 

Ρίξε τη σελίδα κάπου και δες αν σου δουλεύει. Τίποτα δεν σε εμποδίζει να συνδυάσεις την πληροφορία της ανάλυσης και με browser sniffing, ή να προσαρμόσεις το js να σου επιστρέφει και άλλες πληροφορίες. Για παράδειγμα, υπάρχει το screen object που σου δίνει την ανάλυση της οθόνης και όχι του viewport, αν το προτιμάς. Πιθανόν το προτιμάς γιατί είναι ισχυρότερη ένδειξη συσκευής mobile (δεδομένου ότι μπορεί κάποιος να έχει κάνει resize τον browser).

 

Τώρα, αν κατάλαβα λάθος αυτό που θέλεις να κάνεις, ζητώ συγγνώμη - είμαι και γέρος άνθρωπος :shock:

Δημοσ.

Εγώ δεν απέκλεισα τίποτα :P

 

Απλά με την Javascript θα πρέπει να έχει φορτώσει ήδη το site για να κάνει αυτό το detection και μετά κάνεις reload την σελίδα για να τα στείλεις με GET στην PHP.

 

Θα μπορούσες βέβαια να τα βάλεις σε μια σελίδα πριν μπει ο χρήστης στο κεντρικό site όπου θα κάνει αυτό το detection μόνο και κάνει μετά redirect στην main page όπου θα στείλει και τα width & height με GET. Σίγουρα είναι πιο elegant το detection με Javascript απλά πάλι πρέπει να πάρεις μερικές αποφάσεις.

Δημοσ.

Μάλλον είμαι χαζός και δεν καταλαβαίνω τι εννοείς =/

 

Εννοείς ότι δεν γίνεται re-submit; Δεν γίνεται να στείλει τα GET άμα δεν κάνει re-submit την σελίδα. Πάντως παίζει, το έτρεξα στα γρήγορα :P

Δημοσ.

Τώρα στο αρχείο php που διαχωρίζει αν είναι mobile ή όχι πως να βάλω το download link προς την μια αναλυση και την άλλη? Με html μέσα στο php αρχείο ή κάπως με php?

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...