Σκριπτάκι για να βλέπεις την IP σου άμεσα

Δείτε αυτό παίδες.

 #!/usr/bin/env python
 # -*- coding: utf-8 -*
 
 import sys
 from PyQt4 import QtCore, QtGui, uic
 import subprocess,sys,os,urllib2,string
 
 unioptions = ['--unicode', '-u', '--utf8', '--utf-8']
 
 
 
 try:
   from PyQt4 import QtCore, QtGui
 except ImportError :
   print "You need to have PyQT4 installed..."
   exit()
 
  
 fuck = u"Είναι η : "
 
 #---Tray Icon Message Dialog---#
 def MsgInfo( reason ):
    
    if reason == IpIcon.Trigger:
       
       pub_ip = urllib2.urlopen("http://checkip.dyndns.org").read()
       
       IpIcon.showMessage(u"Η IP σου ρε ", fuck  + pub_ip, 15000)
       
 
 def main():
    #-----Main App-----#
    global Ip
    global IpIcon
    Ip = QtGui.QApplication(sys.argv)
    
    
    IpIcon = QtGui.QSystemTrayIcon()
    Ip.setQuitOnLastWindowClosed(False)
    pub_ip = urllib2.urlopen("http://checkip.dyndns.org/").read()
    IpIcon.setToolTip(pub_ip)
    #---Tray Menu Icons---#
    QuitIcon = QtGui.QIcon("ip.png")
    TrayIcon = QtGui.QIcon("ip.png")
    
         #-----Tray Menu-----#   
    global ActionsMenu
    ActionsMenu = QtGui.QMenu()
    QuitAction = ActionsMenu.addAction(QuitIcon,u"Tον πούλο !!!")
    
    #-----Tray Menu Actions-----#
    Ip.connect(QuitAction,QtCore.SIGNAL("triggered()"),Ip.exit)
    IpIcon.connect( IpIcon, QtCore.SIGNAL( "activated(QSystemTrayIcon::ActivationReason)" ), MsgInfo )
 
 
    #-----Methods-----#
    IpIcon.setIcon(TrayIcon)
    IpIcon.setContextMenu(ActionsMenu)
 
    IpIcon.show()

Αυτό κάνει το εξής.

Στην περιοχή ειδοποιήσεων, εμφανίζει αυτό το εικονίδιο

στην περιοχή ειδοποιήσεων (δίπλα από την ένδειξη πληκτρολογίου). Άμα πας το δείκτη πάνω στο εικονίδιο σου βγαίνει αναδυόμενο παραθυράκι, ή tooltip (πως το λένε τέλος πάντων) όπως εδώ πάνω δεξιά που βλέπετε

Όπως καταλάβατε μου λέει την IP μου άμεσα χωρίς firefox και γενικά χωρίς να κάνω ούτε ένα κλικ.

Με δεξί κλικ βγαίνει μια μικρή κομψή προτροπή για κλείσιμο.

Στο αριστερό κλικ όμως του έχω την ιδιότητα να λέει πάλι την IP συνοδευόμενη με κειμενάκι και να μένει και μερικά δευτερόλεπτα πριν σβήσει, αλλά έχει και Χ να το σβήσεις από πιο πριν.
Το πρόβλημα είναι ότι μου παρουσιάζει και λέξεις κώδικα html. Αυτά τα : body, head, κλπ.
Να:

%CE%A3%CF%84%CE%B9%CE%B3%CE%BC%CE%B9%CF%8C%CF%84%CF%85%CF%80%CE%BF%20%CE%B1%CF%80%CF%8C%202019-07-18%2020-14-44

Πως να το κάνω μην φαίνονται αυτά;

2 Likes

Σε όσους άρεσε και δεν ξέρουν πως να το δουλέψουν, να κάνουν τα εξής.

  1. Αντιγράψτε τον κώδικα σε ένα αρχείο (Δεξί κλικ -> Δημιουργία Εγγράφου
  2. Αποθήκευση αρχείου ως ip (Το όνομα του αρχείο δηλαδή)
  3. Δεξί κλικ στο αποθηκευμένο αρχείο και στο μενού πηγαίνετε τις Ιδιότητες (Τελευταία στο mint που έχω εγ[ω σε ελληνική έκδοση το λέει Προτιμήσεις )
  4. Στο παρυθυράκι που θα ανοίξει πηγαίνετε στην καρτέλα Άδειες (Αλλά μπορεί και να έχει τη λέξη Δικαιώματα - το ίδιο είναι)
  5. Τικάρετε το κουτάκι που λέει “Εκτέλεση ως πρόγραμμα

Κάντε κλικ και παίζει. Μπορείτε να το βάλετε και στην εκκίνηση να ξεκινάει αυτόματα και θα παίζει εκτός αν το κλείσετε.

1 Like

Ή μπορείς απλά να γράψεις:

lynx -dump http://checkip.dyndns.org
1 Like

Στα γρήγορα

#!/usr/bin/env python

import urllib2
from lxml import html

# get the html text
html_txt = urllib2.urlopen("http://checkip.dyndns.org").read()

html_tree = html.fromstring(html_txt)
html_body = html_tree.xpath('/html/body')

ip_txt = html_body[0].text

print ip_txt

Μπορείς να το κάνεις με δεκάδες άλλους τρόπους, με άλλες βιβλιοθήκες για το xpath ή με regular expressions.

Επίσης μιας και το κοίταξα, θερμή παράκληση:

OXI ΚΩΔΙΚΑ ΣΕ PYTHON2

2 Likes

Που να το γράψεις αυτό;

Έχεις τον τρόπο ώστε να προσαρμοστεί στο συγκεκριμένο;

Είναι παλιό. Δεν μπορώ να το κάνω σε πιο μοντέρνα έκδοση.

Χωρις να ξερω σχεδων καθολου python για δοκιμασε το εξης:

metavliti = metavliti.replace("\<html\>","")
metavliti = metavliti.replace("\<head\>","")
metavliti = metavliti.replace("\<title\>Current IP Check\<\/title\>","")
metavliti = metavliti.replace("\<\/head\>","")
metavliti = metavliti.replace("\<body\>","")
metavliti = metavliti.replace("\<\/body\>","")
metavliti = metavliti.replace("\<\/html\>","")
metavliti = metavliti.replace("Current IP Address: ","")

Ισως υπαρχει και πιο συντομος τροπος, οποιος τον ξερει (αν υπαρχει) ας μας πει.

Αν καταλαβα την λειτουργεια της replace σωστα μετα τα αλλεπαληλα καλεσματα της και την αποθυκευση της πισω στην μεταβλητη, θα πρεπει να μεινεις μονο με την IP διευθυνση στην metavliti (παρεπιπτοντως metavliti ειναι το ονομα της μεταβλητης και μπορεις να την αλλαξεις σε οτι θες αρκει να παιρνει την τιμη που θες).

Επισεις υπαρχει περιπτωση να χρειαστεις να βαλεις ενα \ μπροστα απο καθε < και > και / γιατι αν δεν κανω λαθος για την Python αυτοι οι χαρακτηρες ειναι ειδικοι. Δοκιμασε και θα δεις τι δουλευει καλητερα.

Ελπίζω να βοηθησα

Για μετατροπη του κωδικα απο Python2 σε Python3 για ριξε μια ματια εδω:

https://docs.python.org/2/library/2to3.html

Κατι καλο σκαρφηστικαν παλι τα φιδακια :slight_smile:

Με την replace δηλαδή δεν εμφανίζονται οι λέξεις; Και χρειάζονται όλες αυτές οι μεταβλητές με το ίδιο όνομα μεταξύ τους; Μετά σε ποια γραμμή κοτσάρω την μεταβλητή ώστε να εκτελεστεί;

Δοκίμασα μερικές λύσεις τους αλλά δεν μου άνοιγε καν

στην ουσια η replace αντικαθηστα οτι του λες να ψαξει με οτι του λες να το αντικαταστησει.

Πχ αν η metavliti εχει σαν τιμη την “Good Morning” και εσυ λες στο προγραμμα σου:

metavliti = metavliti.replace(“Morning”,“Afternoon”)

μετα απο αυτη την γραμμη η metavliti θα εχει την τιμη “Good Afternoon”

στην δικια σου περιπτωση… κατω απο την γραμμη που διαβαζει την pub_ip
αν πχ βαλεις pub_ip = pub_ip.replace(“Current IP Address:”,"") στην ουσια αντικαθιστας στο "Current IP Address: με το κενο (δηλαδη στην ουσια το σβηνεις).

Δοκιμασε για αρχη μονο το:

pub_ip = pub_ip.replace(“Current IP Address:”,"")

κατω απο την πρωτη γραμμη που εμφανιζεται το pub_IP στο προγραμμα σου και τρεξε το προγραμμα και δες αν η προταση “Current IP Address:” υπαρχει.

Αν υπαρχει τοτε κατι αλλο χρειαζετε παραπανισιο… αν οχι… ροκανισε σιγα σιγα το pub_ip ετσι ωστε να μεινει μονο η IP διευθυνση

Δοκίμασα να τρέξω τον κωδικά σου αλλά μάλλον λόγω οτι έχω gnome 3 δεν λειτουργεί γενικά.
Τώρα για το θέμα που έχεις νομίζω λύνεται με regular expressions, δηλαδή

Αρχικά πρέπει να κάνεις import το module για τις regular expressions και να ορίσεις σεμεταβλητή το pattern (το οποίο βρήκα στο regexr.com)

import re

pattern = r"\b(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9])\.){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]))\b"

μετα κάτω από το

pub_ip = urllib2.urlopen("http://checkip.dyndns.org").read()

θα βάλεις αυτό

pub_ip = re.search(pattern, pub_ip).group(0)

Ο γκοντ! Ο γιες! Ο γιο αρ ε γκαντ :stuck_out_tongue::stuck_out_tongue::stuck_out_tongue:

%CE%A3%CF%84%CE%B9%CE%B3%CE%BC%CE%B9%CF%8C%CF%84%CF%85%CF%80%CE%BF%20%CE%B1%CF%80%CF%8C%202019-07-19%2013-31-50

Μου δίνεις το IBAN του λογαριασμού σου και τα βάζω το τόπου :blush:

Το σλας (η κάθετος όπως ήταν στα ελληνικά μέχρι το 2000 :roll_eyes: ) δεν δημιούργησε κανένα πρόβλημα που υποπτεύθηκες. Πιθανό επειδή είναι μέσα στα εισαγωγικά το κατάλαβε ως κείμενο, μια χαρά!

1 Like

Δεν πρόλαβα να το δοκιμάσω. Σ’ ευχαριστώ τα μέγιστα.

Γιατί όμως δεν τρέχει σε σένα; Κι εγώ σύγχρονο mate έχω, ας μην είναι gnome. Τις ίδιες εκδόσεις python και pyqt δεν έχουμε; Έχεις βάλει το pyqt4;

Χαιρομαι που βοηθησα :slight_smile: Ειμαι Καναδα οποτε δεν εχω IBAN :slight_smile: Αλλα οταν κατεβω Ελλαδα μια μπυριτσα αν βρεθουμε θα την πιουμε :slight_smile:

1 Like

:+1: οπωσδήποτε φίλε!

1 Like

Μια ερώτηση, το library αυτό που φτιαχνει το εικονίδιο δεν έχει εξάρτηση από τον DM που τρέχω;

Ποιο library; Το εικονίδιο το έχω απλά στον ίδιο φάκελο με το σκριπτάκι.

Αν εννοείς το Qtgui, τι εννοείς εξάρτηση από το DM (Display Manager δηλαδή;)